You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:57:36