我有一个数组,它可能包含重复项,也可能不包含重复项,但没有nil或""值.

array = ["Ballerina", "Lagoon", "Black", "Space", "Golden", "Lagoon"]

这真的是我最接近解决这个问题的方法,但这里的问题是我不知道副本,所以它不是真的有效:

array.each_with_index.map {|value, index| array[index] == "Lagoon" ? index : ""}.uniq

我希望返回的是数组中的任何重复项将索引值连接到数组值的末尾.因此,最终结果将是:

array = ["Ballerina", "Lagoon 1", "Black", "Space", "Golden", "Lagoon 5"]

谢谢

推荐答案

一种方法是在map循环中使用数组count方法.

array = ["Ballerina", "Lagoon", "Black", "Space", "Golden", "Lagoon"]


new_array = array.each_with_index.map do |value, index| 
    value_duplicated = array.count(value) > 1
    if value_duplicated 
        "#{value} #{index}"
    else
       value 
    end
end

puts new_array

[UPDATE]

如果在每map个循环迭代数组时数组变大,则上述解决方案的性能将受到影响.

替代使用数组的tally方法来按值存储总计数的散列.


array = ["Ballerina", "Lagoon", "Black", "Space", "Golden", "Lagoon"]

# Generates hash for faster lookup
# {"Ballerina"=>1, "Lagoon"=>2, "Black"=>1, "Space"=>1, "Golden"=>1}
array_tally = array.tally

new_array = array.map.with_index do |value, index| 
    value_duplicated = array_tally[value] > 1
    
    if value_duplicated 
        "#{value} #{index}"
    else
       value 
    end
end

puts new_array.inspect

Ruby相关问答推荐

Ruby:对于不存在的键,使用缺省值Hash在Hash中存储Hash

如何使用Ruby range?

我可以在Ruby中以散列的形式访问方法的关键字参数吗?

Ruby:程序终止后仅写入/保存/可见的文件数据

应用 ransack 日期字段过滤器后,相同的输出票证重复而不是一张

删除带括号的子表达式

Ruby: initialize() vs 类体(class body)?

方法应该以 (?问号)结尾吗?只返回一个布尔值?

在 Ruby 中,如何确定字符串是否不在数组中?

差异 - unless/if

Rails:Date.today 是 UTC 吗?

try 学习/理解 Ruby 的 setter 和 getter 方法

将haml标签放入link_to helper

Ruby 多维数组

将数组分成 n 组 m 大小?

无法在 Windows 上安装 Aptana Studio 3.6

Ruby中的file.open、open和IO.foreach,有什么区别?

在 Ruby 中获取本月的最后一天

如何在 Ruby 中创建整数循环?

如何判断一个类是否已定义?