我可以在each_with_index循环迭代器中定义索引的偏移量吗?我的直接尝试失败了:
some_array.each_with_index{|item, index = 1| some_func(item, index) }
Run Code Online (Sandbox Code Playgroud)
编辑:
澄清:我不想要数组偏移我希望each_with_index中的索引不是从0开始,而是例如1.
Mla*_*vić 109
实际上,Enumerator#with_index接收offset作为可选参数:
[:foo, :bar, :baz].to_enum.with_index(1).each do |elem, i|
puts "#{i}: #{elem}"
end
Run Code Online (Sandbox Code Playgroud)
输出:
1: foo
2: bar
3: baz
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我认为它只存在于1.9.2中.
Zac*_* Xu 47
以下是简洁的,使用Ruby的Enumerator类.
[:foo, :bar, :baz].each.with_index(1) do |elem, i|
puts "#{i}: #{elem}"
end
Run Code Online (Sandbox Code Playgroud)
产量
1: foo
2: bar
3: baz
Run Code Online (Sandbox Code Playgroud)
Array#each返回一个枚举器,调用Enumerator#with_index返回另一个枚举器,传递一个块.
1)最简单的是取代index+1的,而不是index给该函数:
some_array.each_with_index{|item, index| some_func(item, index+1)}
Run Code Online (Sandbox Code Playgroud)
但可能这不是你想要的.
2)您可以做的下一件事是j在块中定义不同的索引并使用它而不是原始索引:
some_array.each_with_index{|item, i| j = i + 1; some_func(item, j)}
Run Code Online (Sandbox Code Playgroud)
3)如果你想经常以这种方式使用索引,那么定义另一个方法:
module Enumerable
def each_with_index_from_one *args, &pr
each_with_index(*args){|obj, i| pr.call(obj, i+1)}
end
end
%w(one two three).each_with_index_from_one{|w, i| puts "#{i}. #{w}"}
# =>
1. one
2. two
3. three
Run Code Online (Sandbox Code Playgroud)
这个答案在几年前得到了回答,现在已经过时了.对于现代红宝石,Zack Xu的答案会更好.
| 归档时间: |
|
| 查看次数: |
72747 次 |
| 最近记录: |