【问题标题】:Apply a range filter on an array对数组应用范围过滤器
【发布时间】:2017-02-05 22:00:59
【问题描述】:

我在寻找过滤数据的有效方法时遇到了麻烦。到目前为止我得到了什么:

这样的结构:

struct BasicData {
    let n0 : Double!
    let n1 : Double!
    let n2 : Double!
}
var basicData = [BasicData]()

添加数组后使用:

basicData.append(BasicData(n0: 55.15, n1: 5.1, n2: 2))
basicData.append(BasicData(n0: 2, n1: 2.1, n2: 25))
basicData.append(BasicData(n0: 45.15, n1: 5.1, n2: 15))

我想创建一个新数组,其中包含 n0 > 5 && n0 < 50n2 > 7 && n2 < 40 的所有元素

【问题讨论】:

  • 如果你在初始化时给它们赋值,为什么BasicData 的属性被声明为 IUO?您应该将它们设为非可选。

标签: arrays swift struct


【解决方案1】:

正如@Hamish 在 cmets 中已经提到的,您应该将结构属性设为非可选:

struct BasicData {
    let n0, n1, n2: Double
}

要过滤您的数组,您可以使用范围模式运算符~=。如果您需要使您的范围从大于范围下限的第一个小数开始,您可以使用 Double 属性 .nextUp,如下所示:

let filtered = basicData.filter { 
    5.nextUp..<50 ~= $0.n0 && 7.nextUp..<40 ~= $0.n2 
}

【讨论】:

    【解决方案2】:
    let filteredData = basicData.filter({$0.n0 > 5 && $0.n0 < 50 && $0.n2 > 7 && $0.n2 < 40})
    

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 2012-06-17
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2015-01-05
      • 2015-05-16
      相关资源
      最近更新 更多