二维数组如下:

[[-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));

此算法的性能(和准确性)将主要取决于您对哈希函数的选择。

09-11 17:53
查看更多