将each_with_index与地图一起使用

时间:2013-11-18 05:31:55

标签: ruby

我想获取一个数组并将其作为一个订单列表。目前我正试图这样做:

r = ["a", "b","c"]
r.each_with_index { |w, index| puts "#{index+1}. #{w}" }.map.to_a
# 1. a
# 2. b
# 3. c
#=> ["a", "b", "c"]

输出应为["1. a", "2. b", "3. c"]

如何将正确的输出作为r数组的新值?

3 个答案:

答案 0 :(得分:15)

a.to_enum.with_index(1).map {|element,i| "#{i}.#{element}"}

               or 


 a.map.with_index(1){|element,index| "#{index}.#{element}"}

两种解决方案都可以。 with_index(1)生成第一个元素1的索引。在第一个解决方案中,数组转换为枚举,在后面的解决方案中,直接映射数组。

答案 1 :(得分:10)

您需要首先映射 ,然后映射puts

r = %w[a b c]
r.map.with_index do |w, index|
  "#{index + 1}. #{w}"
end.each do |str|
  puts str
end
#=> ["1. a", "2. b", "3. c"]
# prints:
# 1. a
# 2. b
# 3. c

这是因为each(和each_with_index)只返回原始数组。

答案 2 :(得分:6)

> => r.each_with_index.map { |w, index| "#{index+1}. #{w}" }

> => ["1. a", "2. b", "3. c"]