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, которое будет добавлено к последнему.
Что, если «кот» встречается дважды в первом массиве (возможно, с разными логическими значениями)?



Можешь попробовать
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 раз.
Разве вам все еще не нужно проводить сравнение внутри flatMap, если fakerArray содержит какой-либо элемент из otherFakerArray?
@Larme Если вы имеете в виду «быстрее» с точки зрения времени выполнения, то не обязательно. Возврат значения из flapmap требует выделения массива, что может занять больше времени, чем создание дополнительного элемента на итерацию.
@Sandeep Вау, это действительно сработало! могу я попросить вас объяснить мне логику? Я не понимаю, как это работает, даже если он делает то, что мне нужно
Почему в результате кортеж с "figg" находится перед кортежем с "person", которые оба не найдены со значением
trueвfakeArray, но находятся в другом порядке вOtherFakeArray.