【问题标题】:How can I filter by an array which is contained as a value of a struct如何按包含为结构值的数组进行过滤
【发布时间】:2018-05-08 13:18:00
【问题描述】:

下面是我存储在一个名为 arrayEV 的数组中的数据结构 我很确定我可以按顶部数组中的事件名称进行过滤。 但是我不确定如何通过子数组 [heatlane] 中的内容过滤数组,所以我只希望在 [heatlane] 中的内容满足条件时显示主 arrayEV

struct events {
    var eventnumber:Int
    var eventname:String
    var swimmers:[heatlane]?
}

struct heatlane{
    var heat:Int
    var lane:Int
    var age:Int
    var swimmer:String
    var team:String
    var seedTime:String
    var finalsTime:String
}

【问题讨论】:

    标签: arrays swift dictionary multidimensional-array


    【解决方案1】:

    通过简单属性(如Int)或更复杂的属性(如Array 或其他)进行过滤的方法没有区别。您应该只传递应该过滤哪些元素的条件。

    如果您想过滤事件并且只有这些事件的名称以“A”开头,您可以这样写:

    let prefixedWithA = events.filter{ $0.eventname.hasPrefix("A") }
    

    如果您想过滤名称以“A”为前缀的游泳者的事件,您可以这样写:

    let hasSwimmerPrefixedWithA = events.filter{ $0.swimmers?.contains(where: {$0.swimmer.hasPrefix("A")}) ?? false }
    

    【讨论】:

    • 感谢...现在正在使用搜索栏进行实施。
    【解决方案2】:

    使用Array.filter ..

    var array: [Any] = []
    var heatlaneArr: [heatlane] = []
    array.append(heatlaneArr)
    

    像这样过滤数组,检查数组的每个数组元素

    let findHeatlaneArray = array.filter { (obj) -> Bool in
       return ((obj as? [heatlane]) != nil)
    }
    

    【讨论】:

      【解决方案3】:
      let resultFilter = arrayEV.filter { (events) -> Bool in
              guard let swimmers = events.swimmers else { return false } // check  swimmers not nil
              let result = swimmers.filter({ $0.age == 1}) // age condition
              return result.count ==  0 ? false : true
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 2015-10-17
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多