gpt4 book ai didi

java - 枚举集合的无序对(2-组合)

转载 作者:行者123 更新时间:2023-12-02 11:27:18 24 4
gpt4 key购买 nike

我想迭代一个表示一组 Person 的 ArrayList,并将每个 Person 的内容与其他 Person 进行比较。内容充满了这种形式的 Hasmap。我需要比较匹配键的值(键是唯一的)并获得整数的差异。这应该遍历所有 Hashmap 和 Arraylist 中的所有 Person。但我不应该比较体育。 A 与 C 在一起,然后 C 又与 A 在一起。

我该如何编码?过去 3 个小时我一直在挣扎。

public Integer comparison(){
ArrayList<HashMap> personList = new ArrayList<>();

for(int i = 0; i < personList.size(); i++){
HashMap<String, Integer> persons = new HashMap<>();

for(int j = i+1; j<persons.size(); j++){
// sum up the differences
}
difference+=difference;
}
return difference;
}

最佳答案

这个数学主题使用所谓的Combinations其中你需要找到一个集合的所有k个组合的集合(人A、B和C)。在这种情况下,获得所有组合很简单,因为您知道总是只需要选择两个元素;即,k=2。请参阅下面的外循环和内循环,了解实现此目的的简单方法:

    for(int a=0; a < personList.size()-1 /* stop before last */; a++) {
for(int b=a+1 /* start after first */; b < personList.size(); b++) {
int sumDiff = 0;
System.out.print("person"+(char)('A'+a)+" compared with person"+(char)('A'+b)+" = ");
Set<String> keys = personList.get(a).keySet();
keys.retainAll(personList.get(b).keySet()); // keys in both only
for(String key : keys) {
sumDiff += Math.abs(personList.get(a).get(key)-personList.get(b).get(key));
}
System.out.println(sumDiff);
}
}

输出:

personA compared with personB = 11

personA compared with personC = 8

personB compared with personC = 9

关于java - 枚举集合的无序对(2-组合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49521169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com