![](/img/trans.png)
[英]How do I match two strings in two different string arrays with user input?
[英]How would I match two separate arrays filled with strings in Swift?
我在下面有這兩個 arrays,我希望它們相互匹配。 如果第一個元素的編號為“333-333-3333”,我希望它與另一個數組中的第一個元素“John”匹配。 例如,當我在搜索字段中輸入 333-333-3333 時,我想返回字符串 John。 如果我使用數組,是否可以這樣做?
let personName : [String] = ["John", "San", "Jim"]
let personNumber : [String] = ["333-333-3333", "111-111,1111", "222-222-2222"]
多個 arrays 非常糟糕。 一個更好的解決方案是一個包含有關一個人的所有信息的結構
struct Person {
let name, number : String
}
let people = [Person(name: "John", number: "333-333-3333"),
Person(name: "San", number: "111-111,1111"),
Person(name: "Jim", number: "222-222-2222")]
並搜索
if let foundPerson = people.first(where: {$0.number == "333-333-3333"}) {
print(foundPerson.name)
} else {
print("Person not found")
}
你可以試試
let personName = ["John", "San", "Jim"]
let personNumber = ["333-333-3333", "111-111,1111", "222-222-2222"]
let search = "333-333-3333"
if let item = personNumber.firstIndex(of:search) {
print(personName[item])
}
或者更好的 OOP 解決方案
let arr = [Item(name: "John", number: "333-333-3333")]
if let item = arr.first(where: { $0.number == search }) {
print(item.name)
}
struct Item{
let name,number:String
}
我建議使用 zip() function,它旨在將兩個序列合並為一個元組序列。
let combined = zip(personName, personNumber)
如果你打印組合,你會看到它包含這個數組:
[("John", "333-333-3333"), ("San", "111-111,1111"), ("Jim", "222-222-2222")]
查找您可以使用的特定號碼的名稱
func getName(for number: String, combined: [(String, String)]) -> String? {
return combined.first{ $0.1 == number }?.0
}
getName(for: "333-333-3333", combined: combined) // returns John
getName(for: "444-444-444", combined: combined) // returns nil
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.