如何在 2d 数组中找到 1d 数组

How find 1d array in 2d array

本文关键字:数组 1d 2d      更新时间:2023-09-26

我有一个2d数组(3*3)和一个1d(3)数组。现在我想在列和行的 2d 数组中找到 1d 数组,顺序并不重要。即

A=[
   [0,1,2],
   [3,4,5],
   [6,7,8]
];

我的一维数组是这样的:

t=[7,4,1];

我想要当 1d 数组中的第二个数组(1d) 返回 true 时,现在我不知道这是怎么做的?

为每行 2d 数组创建一个新的 1d 哈希数组。然后哈希源 1d 数组并在 1d 数组而不是 2d 中搜索哈希。

var is_in_there = array_of_hashes.indexOf("source_hash");

我的解决方案非常幼稚,写起来相当无聊。

它涉及有 3 个嵌套循环,

并将矩阵的每一行(首先)的每个元素与数组中的元素进行比较,如果找到所有元素,则返回成功,然后另外 3 个嵌套循环将每列与您的向量进行比较。

嗨,

这是我的解决方案。

如果您想

尝试,您可以检查小提琴:https://jsfiddle.net/arnaudbertrand/skgo9yay/

var d2 = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8]
];
var b = [7, 4, 1];
function inArrayWithoutOrder(d2, d1) {
    var match = false;
    d2.forEach(function (arr) {
        var temp = d1.slice(0);
        arr.forEach(function (e) {
            var i = temp.indexOf(e);
            if (i != -1) {
                temp.splice(i, 1);
            } else {
                return false;
            }
        });
        if (temp.length == 0) {
            match = true;
        }
    });
    return match;
}
function invertRowColumn(d2) {
    var newArray = [];
    d2.forEach(function (d1, i) {
    d1.forEach(function (e, j) {
            if (i == 0) {
                newArray[j] = [];
            }
            newArray[j].push(e);
        });
    });
    return newArray;
}
function inArrayColumnRowWithoutOrder(d2, b){
    return inArrayWithoutOrder(d2, b) || inArrayWithoutOrder(invertRowColumn(d2),b);
}

然后你可以使用: inArrayColumnRowWithoutOrder(d2,b)

你可能可以让它看起来更好,但至少它似乎做了你想要的。