Определение того, содержит ли один массив [(String, Bool)] какие-либо строки из Array2 [String] в swift 4

var fakeArray [("Potato", True),("root", false),("dog", False),("cat", True)]
var OtherFakeArray ["person","cat","dog","figg"]
var finalArrat[(String,Bool)]

Я хочу найти любой элемент в первом массиве, который находится во втором массиве, добавить его в финал, как string, так и bool, а затем скопировать остальные элементы, которые не были найдены в FakeArray, а также добавить их в finalArray, применяя FALSE bool каждому, чтобы их можно было сохранить в окончательном массиве, поэтому результат должен быть

finalArray[("dog",false),("cat",True),("figg", False),("person",False)]

Таким образом, окончательный массив включает в себя все записи из otherFakeArray, те, которые могут быть сопоставлены с fakeArray, имеют свои исходные состояния bool, а те, которые не были найдены, получают новое состояние False, которое будет добавлено к последнему.

Почему в результате кортеж с "figg" находится перед кортежем с "person", которые оба не найдены со значением true в fakeArray, но находятся в другом порядке в OtherFakeArray.

Larme 20.12.2018 23:20

Что, если «кот» встречается дважды в первом массиве (возможно, с разными логическими значениями)?

Martin R 20.12.2018 23:28
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
3
2
206
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Можешь попробовать

let res1 =  fakeArray.filter { otherFakeArray.contains($0.0) }
let tem = fakeArray.map { $0.0 }
let final =  otherFakeArray.filter { !tem.contains($0)}.map { ($0,false)} + res1 
Ответ принят как подходящий

Отфильтруйте все содержимое fakerArray, которое содержится в otherFakerArray. Найдите все элементы, которые не содержатся, и сделайте из него кортеж (_, false) и добавьте к тем, которые содержатся.

Что-то вроде этого,

var result = fakeArray.filter { OtherFakeArray.contains($0.0) }

let notFoundItems = OtherFakeArray.filter { item in
                                            !result.contains(where: { $0.0 == item })
                                    }.map { ($0, false) }

result += notFoundItems

print(result)

А вот и версия получше,

let result = OtherFakeArray.map { string  in
    fakeArray.first(where: { $0.0 == string}) ?? (string, false)
}

Ваш обзор кода

Вы не используете логический тип Swift. Это должен быть один из true или false и не может быть True и False. Разве вы не пытались скомпилировать его с помощью xcode. Он не должен был компилироваться. Как вы пришли к этому вопросу, ничего не пробуя на самом деле.

Вот как должен выглядеть ваш настоящий шрифт.

let fakeArray = [("Potato", true),("root", false),("dog", false),("cat", true)]
let OtherFakeArray = ["person","cat","dog","figg"]

Использование flapMap() может быть более быстрым способом, чем использование filter() + map(), не так ли? Это должно перебирать список OtherFakeArray.count раз вместо OtherFakeArray.count раз + filterOtherFakeArray.count раз.

Larme 20.12.2018 23:23

Разве вам все еще не нужно проводить сравнение внутри flatMap, если fakerArray содержит какой-либо элемент из otherFakerArray?

Sandeep 20.12.2018 23:30

@Larme Если вы имеете в виду «быстрее» с точки зрения времени выполнения, то не обязательно. Возврат значения из flapmap требует выделения массива, что может занять больше времени, чем создание дополнительного элемента на итерацию.

Alexander 21.12.2018 02:25

@Sandeep Вау, это действительно сработало! могу я попросить вас объяснить мне логику? Я не понимаю, как это работает, даже если он делает то, что мне нужно

Damian Talaga 02.01.2019 15:12

Другие вопросы по теме