在Ruby中识别并更新数组中的重复元素(拼接索引值)
解决数组重复元素拼接索引的问题
问题描述
我有一个可能包含重复元素,但不存在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"]
解决方案
可以先统计每个元素的出现次数,再遍历数组时动态判断元素是否重复,按需拼接索引。
代码实现:
# 统计数组中每个元素的出现次数 element_counts = array.tally # 遍历数组处理每个元素 result = array.each_with_index.map do |value, index| element_counts[value] > 1 ? "#{value} #{index}" : value end p result # 输出:["Ballerina", "Lagoon 1", "Black", "Space", "Golden", "Lagoon 5"]
代码说明
array.tally会生成一个哈希表,键为数组元素,值为对应元素的出现次数,比如本例中会得到{"Ballerina"=>1, "Lagoon"=>2, "Black"=>1, "Space"=>1, "Golden"=>1}。- 遍历数组时,通过判断元素的出现次数是否大于1,自动决定是否拼接索引,无需提前指定具体的重复元素,适配任意含重复元素的数组场景。
内容的提问来源于stack exchange,提问作者ToddT
相关产品推荐
相关产品推荐

