007.Map, inject, select ... trong Ruby.

Written by Thach on

Một số hàm thông dụng của Enumerable, module được sử dụng nhiều nhất của Ruby.
each
Đi qua từng phần tử và trả về array nguyên thủy
[1,2,3].each { |num| print "#{num}! " }
# 1 2 3
["Cool", "chicken!", "beans!", "beef!"].each_with_index do |item, index|
print "#{item} " if index%2==0
end
# Cool beans!
map
Đi qua từng phần tử và trả về array đã thay đổi giá trị
array = ["a", "b", "c"]
array.map { |string| string.upcase }
# ["A", "B", "C"]
array = %w(a b c)
array.map.with_index { |ch, idx| [ch, idx] }
# [["a", 0], ["b", 1], ["c", 2]]
inject
["bar","baz","quux"].inject("foo") {|acc,elem| acc + "!!" + elem }
# returns "foo!!bar!!baz!!quux"
select
giống default parameter, nhưng khi gọi phải có thêm tên của arguments
[1,2,3,4,5,6,7,8,9,10].select{|el| el%2 == 0 }
# returns [2,4,6,8,10]
find
Trả về giá trị đầu tiên thỏa mãn điều kiện
[1,2,3,4,5,6,7,8,9,10].find{|el| el / 2 == 2 }
# returns 4
reject
Giữ lại những phần tử không thõa điều kiện
[1,2,3,4,5,6,7,8,9,10].reject{|e| e==2 || e==8 }
# returns [1, 3, 4, 5, 6, 7, 9, 10]
group_by
names = ["James", "Bob", "Joe", "Mark", "Jim"]
names.group_by{|name| name.length}
# {5=>["James"], 3=>["Bob", "Joe", "Jim"], 4=>["Mark"]}
grep
names.grep(/J/)
# ["James", "Joe", "Jim"]
any?
Kiểm tra xem có thằng nào trong array thỏa mãn điều kiện hay không?
[1,2,3].any? { |n| n > 0 }
# true
all?
Kiểm tra xem có có phải tất cả element trong array thỏa mãn điều kiện hay không?
[1,2,3].all? {|a| a.is_a? Integer}
#true
none?
Kiểm tra xem có có phải tất cả element trong array đều không thỏa mãn điều kiện hay không?
['a','b','c'].none? {|a| a.is_a? Integer}
#true
include?
Giống any vậy đó, nhưng cụ thể hơn chút
a = [ "a", "b", "c" ]
a.include?("b") #=> true
a.include?("z") #=> false
Comments