2015-03-07 4 views
2

У меня есть массив 2d (3 * 3) и 1d (3). И теперь я хочу найти 1d-массив в 2d-массиве в столбцах, а строки и порядок не важны. т.е.Как найти массив 1d в массиве 2d

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

и мой 1d массив, как:

t=[7,4,1]; 

Я хочу, чтобы при поиске второй массив (1д) в 2d массива возвращает истину, и теперь я не знаю, как это сделать?

ответ

0

Создайте новый 1d массив хэшей из каждой строки массива 2d. Затем хэш-источник 1d массива и хэш поиска в 1d-массиве вместо 2d.

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

Мое решение чрезвычайно наивно и довольно скучно писать.

Он включает в себя наличие 3 вложенных циклов и сравнение каждого элемента из каждой строки (поначалу) вашей матрицы с массивами и возвращение успеха, если все они были найдены, а затем еще 3 вложенных цикла для сравнения каждого столбца с ваш вектор.

0

Привет, вот мое решение.

Вы можете проверить скрипку, если вы хотите попробовать: 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, б)

Вы, вероятно, может сделать это выглядеть лучше, но, по крайней мере, кажется, делать то, что вы ищете

Смежные вопросы