簡體   English   中英

我將如何匹配兩個單獨的 arrays 填充 Swift 中的字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM