这个答案的解释?

时间:2014-04-05 18:57:10

标签: ruby

在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

1 个答案:

答案 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