【问题标题】:How to prepend elements in array ruby?如何在数组 ruby​​ 中添加元素?
【发布时间】:2020-11-05 12:08:33
【问题描述】:

我想在数组的元素中添加“n-”作为元素索引的编号,然后将其反转 数组是 ["Abricot du Laudot", "Black Caviar", "Brigadier Gerard", "Coup de Folie"] 我需要它是那样的 ["4-Brigadier Gerard!", "3-Coup de Folie!", "2-Black Caviar!", "1-Abricot du Laudot!"] 到目前为止我已经尝试过 race_array.map! { |horse| horse.prepend() }.reverse! 但找不到将数字索引放入前置函数或使用每种方法的方法

【问题讨论】:

    标签: ruby


    【解决方案1】:

    为了将索引注入map 块,您需要调用将索引发送到块的枚举器方法。这里有几个选项:

    race_array = ["Abricot du Laudot", "Black Caviar", "Brigadier Gerard", "Coup de Folie"]
    
    # Use `each_with_index` before calling `map`
    race_array.each_with_index.map{ |name, i| "#{i+1}-#{name}" }.reverse
    # => ["4-Coup de Folie", "3-Brigadier Gerard", "2-Black Caviar", "1-Abricot du Laudot"]
    
    # Use `with_index` after calling `map`
    race_array.map.with_index{ |name, i| "#{i+1}-#{name}" }.reverse
    # => ["4-Coup de Folie", "3-Brigadier Gerard", "2-Black Caviar", "1-Abricot du Laudot"]
    
    # Similarly, you can call `with_index` with an offset:
    race_array.map.with_index(1){ |name, i| "#{i}-#{name}" }.reverse
    # => ["4-Coup de Folie", "3-Brigadier Gerard", "2-Black Caviar", "1-Abricot du Laudot"]
    

    更多信息请参见this question

    对于更“异国情调”的解决方案(尽管可读性较差),您可以将索引与数组的每个元素结合起来,然后加入结果:

    (1..race_array.length).zip(race_array).map{|x| x.join('-')}.reverse
    

    【讨论】:

    • 而不是"#{i}-#{name}",也许写name.prepend.(i+'-')之类的东西更清楚。这当然是口味问题。此外,还有一个功能差异:如果 name 不是 String,而是,例如,nil 或数字,这将在您的代码中被静默接受,而 prepend 的解决方案将引发一个例外。哪一个是这里想要的行为,我不知道。
    • 对不起,当然应该是name.prepend.("#{i}-")
    猜你喜欢
    • 1970-01-01
    • 2019-03-09
    • 2023-04-04
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2012-02-22
    • 2021-05-28
    • 2021-02-17
    相关资源
    最近更新 更多