Ngoài phương thức Array#each_with_index
của Ruby 1.8, nhiều phương pháp liệt kê trong Ruby 1.9 trả về một Bộ đếm khi được gọi không có khối; sau đó bạn có thể gọi phương thức with_index
để có các điều tra viên cũng vượt qua cùng chỉ số:
irb(main):001:0> a = *('a'..'g')
#=> ["a", "b", "c", "d", "e", "f", "g"]
irb(main):002:0> a.map
#=> #<Enumerator:0x28bfbc0>
irb(main):003:0> a.select
#=> #<Enumerator:0x28cfbe0>
irb(main):004:0> a.select.with_index{ |c,i| i%2==0 }
#=> ["a", "c", "e", "g"]
irb(main):005:0> Hash[ a.map.with_index{ |c,i| [c,i] } ]
#=> {"a"=>0, "b"=>1, "c"=>2, "d"=>3, "e"=>4, "f"=>5, "g"=>6}
Nếu bạn muốn map.with_index
hay select.with_index
(hoặc tương tự) dưới của Ruby 1.8.x, bạn có thể làm nhàm chán-nhưng- này phương pháp nhanh:
i = 0
a.select do |c|
result = i%2==0
i += 1
result
end
hoặc bạn có thể vui chơi thêm chức năng:
a.zip((0...a.length).to_a).select do |c,i|
i%2 == 0
end.map{ |c,i| c }
Câu hỏi của bạn là gì? Tôi không hiểu bạn đang hỏi gì. –
Ah, tôi biết đó là mơ hồ. Cách theo dõi biến số lượt truy cập. – s84