【问题标题】:How find 1d array in 2d array如何在二维数组中找到一维数组
【发布时间】:2015-03-07 19:35:44
【问题描述】:

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

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

我的一维数组是这样的:

t=[7,4,1];

我想在二维数组中搜索第二个数组(1d)时返回true,现在不知道怎么做?

【问题讨论】:

    标签: javascript arrays search 2d


    【解决方案1】:

    为二维数组的每一行创建一个新的一维哈希数组。然后散列源一维数组并在一维数组中搜索散列而不是二维。

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

    【讨论】:

      【解决方案2】:

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

      它涉及 3 个嵌套循环,并将矩阵每一行(最初)的每个元素与数组中的元素进行比较,如果找到所有元素,则返回成功,然后再使用 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)

        您可能可以让它看起来更好,但至少它似乎可以满足您的需求

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-23
          • 2013-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多