如下所示的二维数组:
[[-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]]
有什么想法可以实现这一点。
答案 0 :(得分:2)
如@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));
此算法的性能(和准确性)主要取决于您对哈希函数的选择。