【问题标题】:Swift - How to search an array of structs [duplicate]Swift - 如何搜索结构数组[重复]
【发布时间】:2020-03-25 17:57:27
【问题描述】:

我有一个这样的数组,比如:

struct elephants {
 var name: String
 var age: Int
 var location: String
}

然后我有一个结构数组

var elephantArray [elephants] = [elephant1, elephant2, elephant3]

我想要做的是根据大象.name 进行搜索 - 所以如果大象2.name 是“Bob”,那么当我根据名称“Bob”搜索数组时,它将返回索引位置大象2.

我该怎么做呢?

【问题讨论】:

  • 你读过Array的文档吗?如果你有,你会找到一个名为firstIndex(where:)的方法。

标签: ios swift xcode swift3


【解决方案1】:

这里有一个简单的函数可以帮助你:

func searchElephantIndex(name: String, elephArray: [elephants]) -> Int? {
  return elephArray.firstIndex { $0.name == name }
}

如果请求名称的大象不存在,该函数将返回 nil。

【讨论】:

    【解决方案2】:

    firstIndex

    这里是实现

    import UIKit
    import Foundation
    
    struct elephants {
     var name: String
     var age: Int
     var location: String
    }
    
    let elephant1 = elephants.init(name: "A", age: 10, location: "BD")
    let elephant2 = elephants.init(name: "B", age: 20, location: "UK")
    let elephant3 = elephants.init(name: "C", age: 30, location: "IND")
    
    var elephantArray :  [elephants] = [elephant1, elephant2, elephant3]
    
    if let i = elephantArray.firstIndex(where: { $0.name == "A" }) {
        print("get the \(i)")
    }
    

    【讨论】:

    • 您好,谢谢。我得到的唯一问题是 i 的值被返回为:i [Element].index? 1 - 这意味着代码的其余部分不是读取 1 而是读取 [Element].Index?这是把代码搞砸了
    • 您能详细说明一下吗?我在操场上运行了代码,发现get the 0
    【解决方案3】:

    这里有一个简单的获取索引的方法:

    func getIndex(for name: String) {
        for i in 0..<elephantArray.count {
            if elephantArray[i].name == name {
                print(i)
            }
        }
    }
    

    我们遍历数组并检查元素的名称属性是否与我们正在查找的属性匹配,该属性在函数参数中指定。

    例如:

    let elephant1 = Elephant(name: "A", age: 1)
    let elephant2 = Elephant(name: "B", age: 2)
    let elephant3 = Elephant(name: "C", age: 3)
    
    let elephantArray = [elephant1, elephant2, elephant3]
    
    getIndex(for: "B") // prints 1
    
    

    for 循环将每个元素的 name 属性与“B”进行比较,并在匹配时打印出索引。这仅适用于i 从 0 而不是 1 开始,因此它与数组索引并行递增,数组索引也从 0 开始。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多