在Bastardsbookofruby中,这是可枚举部分中的示例问题。有人可以引导我完成这个答案吗? | a,i |部分让我感到困惑。另外,为什么每个都使用索引和地图? i和a特别代表什么?
练习:练习each_with_index和map
使用先前使用的ark数组(['cat','dog','pig','goat']),创建一个新数组,其中每个第二个元素都是大写和向后的。
解决方案
ark = ['cat', 'dog', 'pig', 'goat']
ark2 = ark.each_with_index.map do |a, i|
if i % 2 == 1
a.capitalize.reverse
else
a
end
end
puts ark2.join(', ')
#=> cat, goD, pig, taoG
答案 0 :(得分:0)
#Define the initial array
ark = ['cat', 'dog', 'pig', 'goat']
ark2 = #Define a new array
ark. #by using the initial array
each_with_index. #loop on it with an index (1)
map do |a, i| #loop in the list and replace the result (2)
if i % 2 == 1 #on every 2nd entry (3)
a.capitalize.reverse #return the string in capitals and reverse order
else #else
a #return the result
end
end
puts ark2.join(', ') #Print the result, separated by comma,
#=> cat, goD, pig, taoG
(1)each_with_index
导致
[["cat", 0], ["dog", 1], ["pig", 2], ["goat", 3]]
(2)在每个循环中a是cat,dog ......,i
是循环计数器(0..4)。
(3)i % 2
是模运算(提醒分区的一部分)。
示例:5 % 2
为2,休息1.其余1是您得到的结果。
ark2 = ark.each_with_index.map do |a, i|
i.odd? ? a.capitalize.reverse : a
end
或(我最喜欢的)
ark2 = []
ark.each_with_index do |a, i|
ark2 << (i.odd? ? a.capitalize.reverse : a)
end