2016-12-21 2 views
1

Я получаю результат, как true для следующего кодаКак найти целое число в массиве массивов?

var elements1:[Int] = [10, 20, 30, 40, 50] 

if elements1.contains (50) { 

    print("true") 

} 

Я имею проблему выяснения того, что if condition должно быть для следующих действий, чтобы получить результат, как если trueelements2 имеет 50 в нем.

var elements2:[[Int]] = [[10], [20, 30], [40, 50]] 

ответ

6

Вы можете использовать joined() для выравнивания вложенных массива в одну, и применить поиск contains на соединенном массива:

let elements2 = [[10], [20, 30], [40, 50]] 
if elements2.joined().contains(50) { 
    print("Contains 50!") 
} 

Заметим, что вам не нужно включать аннотацию типа для elements2 выше, поскольку тип выводится (до [[Int]]).

Другой альтернативой было бы использовать contains, чтобы проверить каждый внутренний массив для 50 элемента, и действовать, если какой-либо из внутренних массивов содержит значение:

if elements2.map({ $0.contains(50) }).contains(true) { 
    print("Contains 50!") 
} 

или, используя reduce сложить внутренние массивы булево, проверка возможного включения 50 в каждом внутреннем массиве (довольно подобный подход к приведенной выше)

if elements2.reduce(false, { $0 || $1.contains(50) }) { 
    print("Contains 50!") 
} 
+0

Цените ваше объяснение с альтернативами – Coder221

+0

@ Coder221 рад помочь. Добавлена ​​также альтернатива «уменьшить», но я бы лично предпочел бы «join()» (лучшая семантика, imo). – dfri

+0

Это хорошо знать. – Coder221

1

Вы можете использовать flatMap для этого.

let newArray = elements2.flatMap { $0 } 
if newArray.contains(50) { 
    print("true") 
} 
+0

append {$ 1} также – Spynet

+0

newArray выполняет 4 раза (у меня есть только 3 массива в массиве), хотя я получаю желаемый результат. – Coder221

5

я бы, вероятно, использовать joined, чтобы упростить задачу, но вы можете легко использовать вложенную contains:

var elements2:[[Int]] = [[10], [20, 30], [40, 50]] 

if elements2.contains(where: { $0.contains(50) }) { 
    print("true") 
} 
+0

Это имеет преимущество «короткого замыкания». –

+0

Что такое короткое замыкание – Coder221

+0

@ Coder221 Это означает, что поиск останавливается, когда элемент найден. Например, решение 'reduce' должно перебирать все элементы, даже если первое - это тот, который вы хотите найти. – Sulthan