Arrays 如何在Swift中匹配两个填充字符串的独立数组?

Arrays 如何在Swift中匹配两个填充字符串的独立数组?,arrays,swift,string,xcode,Arrays,Swift,String,Xcode,下面是这两个数组,我希望它们相互匹配。如果第一个元素的编号为“333-333-3333”,我希望它与另一个数组中的第一个元素“John”匹配。例如,我想在搜索字段中输入333-333-3333时返回字符串John。如果Im使用数组,是否可以这样做 let personName : [String] = ["John", "San", "Jim"] let personNumber : [String] = ["333-333-3333", "111-111,1111", "222-222-222

下面是这两个数组,我希望它们相互匹配。如果第一个元素的编号为“333-333-3333”,我希望它与另一个数组中的第一个元素“John”匹配。例如,我想在搜索字段中输入333-333-3333时返回字符串John。如果Im使用数组,是否可以这样做

let personName : [String] = ["John", "San", "Jim"]
let personNumber : [String] = ["333-333-3333", "111-111,1111", "222-222-2222"]

我建议使用zip()函数,该函数旨在将两个序列合并为一个元组序列

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
你可以试试

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
}

多个阵列非常糟糕。更好的解决方案是一个包含关于一个人的所有信息的结构

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")
}

这些数据来自哪里?你能避免一开始就把它放在多个数组中吗?这个答案根据需要解决了这个问题,但当然,使用struct包装个人详细信息比Vadian答案要好得多