【问题标题】:How could I use `each_index` to print the index of each element?如何使用 `each_index` 打印每个元素的索引?
【发布时间】:2017-12-19 18:51:56
【问题描述】:

我有一个数组

array = [ "mm,GATO,nn",  "mm,GATO,nn",
          "mm,PERRO,nn", "mm,PERRO,nn",
          "mm,LOBO,nn",  "mm,LOBO,nn"  ]

我需要使用each_index获取

array = [ "mm,GATO,nn1",  "mm,GATO,nn2",
          "mm,PERRO,nn1", "mm,PERRO,nn2",
          "mm,LOBO,nn1",  "mm,LOBO,nn2"  ]

请帮帮我。

【问题讨论】:

  • 你想做什么,结果应该是什么样子,到目前为止你尝试了什么?

标签: arrays ruby string indexing


【解决方案1】:
num = "1"
array.each_with_index do |string, index|
    array[index] = string + num
    num = num == "1" ? "2" : "1"
end

【讨论】:

    【解决方案2】:

    由于所有偶数索引元素都需要一个“1”而所有奇数元素都需要一个“2”,我将创建一个哈希值,将偶数映射到“1”,奇数映射到“2”,然后映射数组@987654321 @,为每个元素附加正确的值。

    index_is_even = { true => "1", false => "2" }
    
    array.map.with_index  {  |el, i| el + index_is_even[i % 2 == 0] }
    

    【讨论】:

    • 你可以用even?检查偶数,用odd?检查奇数。
    • 完全! array.map.with_index { |el, i| el + (i.even? ? "1" : "2") } 之类的东西?
    • 几乎,你需要在i而不是el上调用even?。所以该块将类似于{ |el, i| el + (i.even? ? "1" : "2") }
    【解决方案3】:

    您只是在为重复的字符串编号吗?在这种情况下,您可以使用计数器哈希:

    array = ["mm,GATO,nn","mm,GATO,nn","mm,PERRO,nn","mm,PERRO,nn","mm,LOBO,nn","mm,LOBO,nn"]
    counter = Hash.new(0)
    array.map! do |word|
      word + (counter[word] += 1).to_s
    end
    
    p array
    # ["mm,GATO,nn1", "mm,GATO,nn2", "mm,PERRO,nn1", "mm,PERRO,nn2", "mm,LOBO,nn1", "mm,LOBO,nn2"]
    

    如果出于某种原因你真的想使用each_index,并且你确定你总是有双字:

    array.each_index do |i|
      array[i] << (i % 2 + 1).to_s
    end
    

    【讨论】:

      【解决方案4】:

      如果你有一组长度和顺序未知的相同单词,你可以这样做:

      > array.group_by {|e| e}.values.map{|a| a.map.with_index(1) {|w, i| w << i.to_s}}.flatten
      ["mm,GATO,nn1", "mm,GATO,nn2", "mm,PERRO,nn1", "mm,PERRO,nn2", "mm,LOBO,nn1", "mm,LOBO,nn2"]
      

      这将修改array。如果你想要一个新数组,你可以这样做:

      > array.group_by {|e| e}.values.map{|ar| ar.map.with_index(1) {|w, i| "%s%i" % [w, i] }}.flatten 
      

      如果你知道你的目标词只是有序对,你也可以这样做:

      > array.each_slice(2).map{|l| l.zip(['1','2']).map(&:join)}.flatten
      ["mm,GATO,nn1", "mm,GATO,nn2", "mm,PERRO,nn1", "mm,PERRO,nn2", "mm,LOBO,nn1", "mm,LOBO,nn2"]
      

      【讨论】:

        猜你喜欢
        • 2019-07-14
        • 1970-01-01
        • 2019-05-14
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 2020-02-16
        • 1970-01-01
        • 2022-11-20
        相关资源
        最近更新 更多