【问题标题】:How would I match two separate arrays filled with strings in Swift?在 Swift 中,如何匹配两个用字符串填充的单独数组?
【发布时间】:2020-04-06 19:46:01
【问题描述】:

我在下面有这两个数组,我希望它们相互匹配。如果第一个元素的编号为“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 swift string xcode


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以试试

    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
    }
    

    【讨论】:

      【解决方案3】:

      我建议使用 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
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-05
      • 2015-05-21
      • 2017-10-10
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多