二维数组如下:
[[-1 2 -1] [-1 1 0] [-1 0 1] [-1 -1 2] [-1 2 -1]]
我想保留一个
[-1 1 0] [-1 0 1]
和一个[-1 2 -1] [-1 -1 2] [-1 2 -1]
。因为每个组中的数组与其他具有相同值但顺序不同的数组相似,所以我只想保留每个组中的一个。
结果如下:
[[-1 2 -1] [-1 1 0]]
或
[[-1 -1 2],[-1 0 1]]
有什么想法可以实现这一点吗。
最佳答案
正如@SomeDude所建议的,您可以创建某种散列函数,该函数为每一组值生成一个唯一的代码,而不管它们的顺序如何。然后使用散列函数添加散列映射的每个值输出将只是散列映射的值。
下面是一个非常简单的javascript实现:
const input = [[-1, 2, -1], [-1, 1, 0], [-1, 0, 1], [-1, -1, 2], [-1, 2, -1]];
const toHash = (arr) => [...arr].sort().join();
const hashSet = input.reduce((acc, cur) => (acc[toHash(cur)] = cur, acc), {});
const output = Object.values(hashSet);
console.log(JSON.stringify(output));
此算法的性能(和准确性)将主要取决于您对哈希函数的选择。