def enumerate(arr):
(0..arr.length - 1).to_a.zip(arr)
有没有内置的功能可以做到这一点?它不需要将其成员设置为不可变,只需要在标准库中存在即可。我不想成为为了在项目中添加Python功能而子类化Array类的那个人。
在Ruby中它有不同的名称吗?
%w(a b c).enumerate
=> [[0, "a"], [1, "b"], [2, "c"], [3, "d"]]
Python中类似这样的代码:
a = ['do', 're', 'mi', 'fa']
for i, s in enumerate(a):
print('%s at index %d' % (s, i))
在 Ruby 中,它变成了这样:
a = %w(do re mi fa)
a.each_with_index do |s,i|
puts "#{s} at index #{i}"
end
%w(a b c).map.with_index {|x, i| [i, x] }
;)
。 - yurisicha = %w(do re mi fa)
a.length.times.zip a
zip(range(len(a)), a)
,以防万一您和我一样需要运行irb
才能理解这个聪明的.times
的用法。非常好。 - yurisich
a = 'do re mi fa'.split()
可能更接近 Ruby 版本。 - Antimony