You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何检测数组中user_id、risk_id、measure_id的重复组合并返回指定二维数组?

解决二维数组中user_id/risk_id/measure_id组合唯一性验证与重组问题

嘿,我来帮你搞定这个需求!下面我会分步骤说明怎么验证组合唯一性,以及当存在重复时如何生成目标格式的新数组,我用Python来写示例代码,你可以根据自己的编程语言调整思路~

第一步:验证组合唯一性

首先,我们需要遍历原数组,用一个集合来跟踪已经出现过的(user_id, risk_id, measure_id)三元组——因为集合的元素是唯一的,很适合用来检测重复。

代码示例:检测重复组合

def has_duplicate_combinations(original_array):
    seen = set()
    for row in original_array:
        # 假设每行的前三个元素分别是user_id, risk_id, measure_id
        combo = (row[0], row[1], row[2])
        if combo in seen:
            return True  # 发现重复,直接返回True
        seen.add(combo)
    return False

如果这个函数返回True,说明存在重复的组合,接下来我们就需要生成目标格式的新数组。

第二步:重组数组(按user_id分组,原行作为列)

当存在重复时,我们需要把同一个user_id对应的所有原数组行收集起来,作为新数组中该行的列元素。简单来说,就是构建一个以user_id为键,对应所有相关行的字典,再把字典转化为二维数组。

代码示例:生成重组后的数组

def restructure_array(original_array):
    # 先按user_id分组
    user_groups = {}
    for row in original_array:
        user_id = row[0]
        if user_id not in user_groups:
            user_groups[user_id] = []
        user_groups[user_id].append(row)
    
    # 转化为目标二维数组:每行第一个元素是user_id,后面跟着所有属于该用户的原行
    restructured = []
    for user_id, rows in user_groups.items():
        new_row = [user_id] + rows
        restructured.append(new_row)
    
    return restructured

完整流程示例

我们拿一个包含重复组合的测试数组来跑一遍:

# 测试用原数组
original_array = [
    ["user1", "riskA", "measX", "备注1"],
    ["user2", "riskB", "measY", "备注2"],
    ["user1", "riskA", "measX", "备注3"],  # 重复组合
    ["user1", "riskC", "measZ", "备注4"],
    ["user2", "riskB", "measY", "备注5"]   # 重复组合
]

# 第一步:检查是否有重复
if has_duplicate_combinations(original_array):
    print("存在重复的user_id/risk_id/measure_id组合")
    # 第二步:生成重组后的数组
    result = restructure_array(original_array)
    print("重组后的数组:")
    for row in result:
        print(row)
else:
    print("所有组合都是唯一的,无需重组")

输出结果:

存在重复的user_id/risk_id/measure_id组合
重组后的数组:
['user1', ['user1', 'riskA', 'measX', '备注1'], ['user1', 'riskA', 'measX', '备注3'], ['user1', 'riskC', 'measZ', '备注4']]
['user2', ['user2', 'riskB', 'measY', '备注2'], ['user2', 'riskB', 'measY', '备注5']]

注意事项

  • 如果你使用的是其他编程语言(比如JavaScript、Java),核心思路是一样的:用哈希集合检测重复,用哈希表(字典)分组,最后转化为二维数组。
  • 要确保原数组中每行的user_idrisk_idmeasure_id的位置是固定的,如果位置不同,记得调整代码中提取三元组的索引。

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

火山引擎 最新活动