如何删除二维数组中的相似数组?

时间:2019-02-15 17:17:47

标签: arrays algorithm

如下所示的二维数组:

[[-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]]

有什么想法可以实现这一点。

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

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