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
相关产品推荐
相关产品推荐

