2015-11-05 1 views
0

Я пытаюсь сравнить два массива (array1, array2), и если определенное значение ключа содержится в array2, значение ключа в array1, которое содержит значение array2, должно быть напечатано с его «indexPath».Swift 2 - Проверьте, содержит ли массив значение из другого меньшего массива

Кода я почти работаю однако, приложение падает, потому что, идя корыта ключей, array2 выходит из диапазона, поскольку она содержит меньше индексов, что array1

Как я могу сделать код посмотреть на матчи, если другие массив меньше?

let array1 = [["aaa","bbb","ccc","ddd","eee"], ["fff","ggg","hhh","matched","iii"], ["lll","mmm","nnn","ooo","ppp"], ["666","777","888","999","000"] ] //4 elements 

let countArray1 = array1.enumerate() 

let array2 = [["111","222"], ["333","444"], ["matched","555"]] // 3 elements 


for (index, element) in countArray1{ 

    let containedValue = array1[index].contains(array2[index][0]) 

    if (containedValue) == true{ 

     print("The index of the contained value is: ????") //error 

    } 
} 
+0

Вам нужно только знать, присутствует ли заданное значение в обоих массивах? – Arc676

+0

, только если значение в 'array2' содержится в' array1' – SNos

+0

Будут ли массивы всегда быть 2D? – Arc676

ответ

0

Я хотел бы превратить меньший 2D массив в 1D массив, а затем петлю через оба размерами большего массива и использовать NSArray.contains:

ОТКАЗ: этот код не тестировался. @Community: если вы наткнетесь на это и заметите ошибку или что-то, что может быть лучше написано, комментировать или редактировать. Я использую Obj-C больше, чем Swift.

//convert 2D array to 1D 
func from2Dto1D(array: NSArray) -> NSArray { 
    var newArr = NSMutableArray() 
    for (d1) in array { 
     for (d2) in d1 { 
      newArr.append(d2) 
     } 
    } 
    return newArr as NSArray 
} 
func hasMatch(array1: NSArray, array2: NSArray) -> boolean { 
    var bigger: NSArray 
    var smaller: NSArray 
    if (array1.count > array2.count){ 
     bigger = array1 
     smaller = from2Dto1D(array2) 
    }else{ 
     bigger = array2 
     smaller = from2Dto1D(array1) 
    } 
    for (d1) in bigger{ 
     for (item) in d1 { 
      if (smaller.contains(item)){ 
       print("Match found"); 
       return true 
      } 
     } 
    } 
    return false 
} 
0

Вы можете сгладить оба массива, а затем перечислить их, чтобы проверить, к какому индексу соответствуют объекты.

let array1 = [["aaa","bbb","ccc","ddd","eee"], ["fff","ggg","hhh","matched","iii"], ["lll","mmm","nnn","ooo","ppp"], ["666","777","888","999","000"] ] //4 elements 

let array2 = [["111","222"], ["333","444"], ["matched","555"]] // 3 elements 

let flat1 = Array(array1.flatten())  
let flat2 = Array(array2.flatten()) 

for (index1,object1) in flat1.enumerate() { 
    for (index2,object2) in flat2.enumerate() { 
     if object2 == object1 { 
      print("index1 is: \(index1). Index 2 is \(index2)") 
     } 
    } 
} 
Смежные вопросы