2015-11-05 76 views
0

我想比較兩個陣列(array1, array2)並且如果一個特定的密鑰值包含在array2,需要打印在array1包含數組2值的鍵值的值與它的'indexPath'。夫特2 - 檢查陣列包含來自另一個較小的陣列

我幾乎工程然而,代碼,應用程序崩潰,因爲當去槽鑰匙,數組2超出範圍,因爲它含有較少的指標,該陣列1

我怎樣才能使代碼看起來因爲如果其他比賽數組更小?

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陣列成一維數組,然後遍歷更大陣列的兩個維度並使用NSArray.contains:

聲明:這個代碼是未經測試。 @社區:如果你偶然發現並注意到一個錯誤,或者可以更好地書寫,評論或編輯的東西。我比Swift更多地使用Obj-C。

//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)") 
     } 
    } 
}