Article: Enumerable 929

ngocdaothanh.myopenid.com 149
Updated about 1 year ago

Enumerable trong Ruby tương đương với collection trong Java. Nói theo thuật ngữ Java, thì Enumerable là interface được những class như Array, Hash, Set implement. Còn nói theo thuật ngữ Ruby, thì module Enumerable được những class trên include.

Bài viết này giới thiệu vài method tiện dụng của Enumerable, nếu dùng chương trình sẽ súc tích và sáng sủa. Phần ví dụ dùng array cho thống nhất, nói chung chúng vẫn đúng nếu thay array bằng hash hay cái gì đó đã include module này.

map/collect

Biến array a1 thành array a2 có cùng số phần tử, dùng map (có alias là collect) rất tiện. Ý tưởng của nó chính là phép ánh xạ y = f(x) trong toán học, để biến từng phần tử x của a1 thành phần tử y của a2.

Ví dụ từ a1 chứa tên ảnh, ta muốn tạo a2 chứa URL có dạng y = http://my/path/x. Nếu chỉ quen với C, ta viết như sau:

a1 = ['asian.jpg', 'ebony.jpg']

a2 = [] # Initialize
a1.each do |e|
a2 << "http://my/path/#{e}"
end

Nếu dùng map:

a1 = ['asian.jpg', 'ebony.jpg']
a2 = a1.map { |e| "http://my/path/#{e}" }

Thần chú: Biến array thành array cùng kích thước: dùng map

select/find_all

Muốn chọn những phần tử thoả mãn điều kiện nào đó từ array, ta dùng select (có alias là find_all). Trái nghĩa với select là reject.

a = [1, 2, 3, 4]
evens = a.select { |e| i%2 == 0 }

Thần chú: Biến array thành array nhỏ hơn: dùng select

inject

Khi muốn tạo giá trị scalar (1 chiều) từ các phần tử của array (đa chiều), ví dụ để tính tổng của các phần tử, thường ta viết như sau:

a = [1, 2, 3]

sum = 0
a.each do |e|
sum += e
end

Nếu dùng inject:

a = [1, 2, 3]
sum = a.inject(0) { |tmp, e| tmp += e }

Thần chú: Kết hợp tất cả phần tử của array thành một biến duy nhất: dùng inject

join

Thật ra join chỉ có trong Array. Rất nhiều khi ta muốn nối các phần tử của array lại thành một chuỗi, cách nhau bởi dấu phẩy chẳng hạn. Nếu tự viết thì rất lắt nhắt vì dấu phẩy phải nằm xen kẽ giữa các phần tử.

Dùng join thì ta chỉ cần viết đơn giản như sau:

a = [1, 2, 3]
s = a.join(", ") # => "1, 2, 3"

Thần chú: Nối tất cả phần tử của array thành chuỗi: dùng join

any? và all?

Khi muốn kiểm tra trong tập hợp có ít nhất một phần tử thỏa mãn tính chất nào đó hay không, ta dùng any?. Khi muốn kiểm tra xem tất cả phần tử có thỏa mãn tính chất nào đó hay không, ta dùng all?

a = [1, 2, 3]
at_least_less_than_2 = a.any? { |e| e < 2 }
all_less_than_2 = a.all? { |e| e < 2 }

Tóm lại, nếu cần hơn 1, 2 dòng để thao tác trên array, hãy tham khảo tài liệu của Enumerable gấp{#emotions_dlg.laughing}

1 2 3 

Editors
ngocdaothanh.myopenid.com 149
phananhvu.myopenid.com 125

Comments

phananhvu.myopenid.com 125
over 2 years ago

Thần chú any? all? đâu nhỉ :D   

tiendung.myopenid.com
about 1 year ago

Cả nhà cho tớ hỏi

Ở Việt Nam có lập trình viên nào, nhóm nào, công ty làm việc với Ruby (Rails) chuyên nghiệp không nhỉ?

ngocdaothanh.myopenid.com 149
about 1 year ago

Ai/công ty nào nhanh nhạy thì đa số đều biết.

Chuyên nghiệp = chuyên 1 thứ? Có lẽ công ty nào có đội ngũ kĩ thuật vững thì việc áp dụng cái Ruby này chỉ như mua cái tủ lạnh cho nhân viên thôi.

tiendung.myopenid.com
about 1 year ago

Chuyên nghiệp trong câu hỏi của tớ nghĩa là code theo chuẩn của Ruby và Rails và đã và đang làm project Rails để lấy tiền.

Năm sao tớ về Hà Nội, muốn gặp gỡ với những Rails Developers đó để giao lưu học hỏi. Bạn nào biết cụ thể thì chỉ giùm nhé.

ngocdaothanh.myopenid.com 149
about 1 year ago

Mong muốn này có lẽ chỉ đạt được khi năm sao có nhiều người cùng sở thích Ruby tạo thành cộng đồng phi lợi nhuận. Bạn tiendung đầu têu xem{#emotions_dlg.smile}.

tiendung.myopenid.com
Updated about 1 year ago

Tớ muốn liên kết với khoảng 2 đến 3 lập trình viên Ruby & Rails và một designer để lập một đội sinh hoạt lành mạnh và kiếm Ruby & Rails projects từ nước ngoài về làm để tăng cường trình độ và cải thiện thu nhập.  Bạn Bang.L ở trong HCM là một ví dụ:

http://www.odesk.com/exams/Certified-Ruby-Rails-Developers_68172

ngocdaothanh.myopenid.com 149
Updated about 1 year ago

Xem trang đó thấy người ta quản lí chặt thời gian. Lập đội coi bộ khó mà quản lí chặt được. Nếu muốn làm theo đội, chi bằng tiendung mở công ty, rồi tuyển người làm full-time.

tiendung.myopenid.com
about 1 year ago

Tìm Ruby &Rails developers ở Hà Nội chắc bói không ra người. Tớ Google để tìm người Việt làm Ruby còn khó nữa là :)

Ở đây có bạn nào đang ở Hà Nội hoặc sẽ về Hà Nội không? Tớ muốn kết bạn và giao lưu.

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content