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

Ruby合并字符串重复项:重复数字对应值求和实现方案

合并重复键对应值的实现方案

没问题,这种合并重复键对应值的需求太常见了!我拿最典型的键值对字符串格式(比如"1:5,2:3,1:2,3:7"这种,逗号分隔键值对、冒号分隔键与值)来举例,给你一套清晰的实现方案,不管用JavaScript还是Python都能轻松搞定:

JavaScript 实现步骤

1. 解析原始字符串

先把字符串拆分成单个键值对,再把键和值转换成数字类型:

const inputStr = "1:5,2:3,1:2,3:7";
// 拆分出所有键值对并转为数字键值
const keyValuePairs = inputStr.split(",").map(pair => {
  const [key, value] = pair.split(":");
  return { key: parseInt(key, 10), value: parseInt(value, 10) };
});

2. 合并重复键的数值

用一个对象来存储每个键对应的累加值,遍历所有键值对:

const mergedMap = {};
keyValuePairs.forEach(({ key, value }) => {
  // 如果键已存在就累加,不存在就初始化
  mergedMap[key] = (mergedMap[key] || 0) + value;
});

3. 转换为目标格式

根据需求转换成字符串或者数组:

// 转成处理后的字符串
const resultStr = Object.entries(mergedMap)
  .map(([key, value]) => `${key}:${value}`)
  .join(",");
// 输出结果:"1:7,2:3,3:7"

// 转成二维数组
const resultArr = Object.entries(mergedMap)
  .map(([key, value]) => [parseInt(key, 10), value]);
// 输出结果:[[1, 7], [2, 3], [3, 7]]

Python 实现步骤

1. 解析原始字符串

同样先拆分字符串,转换键和值为整数:

input_str = "1:5,2:3,1:2,3:7"
# 拆分键值对并转为整数类型
key_value_pairs = [pair.split(":") for pair in input_str.split(",")]
key_value_pairs = [(int(key), int(value)) for key, value in key_value_pairs]

2. 合并重复键的数值

用字典来统计累加值:

merged_dict = {}
for key, value in key_value_pairs:
    # 累加值,不存在则初始化为当前值
    merged_dict[key] = merged_dict.get(key, 0) + value

3. 转换为目标格式

生成最终的字符串或数组:

# 转成处理后的字符串
result_str = ",".join([f"{k}:{v}" for k, v in merged_dict.items()])
# 输出结果:"1:7,2:3,3:7"

# 转成元组数组
result_arr = list(merged_dict.items())
# 输出结果:[(1, 7), (2, 3), (3, 7)]

注意:如果你的原始字符串用的是其他分隔符(比如空格分隔键值对、下划线分隔键与值),只需要修改split()方法里的参数即可,核心的合并逻辑完全通用。

内容的提问来源于stack exchange,提问作者Lyres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:59:52