在阵列上应用范围过滤器

时间:2017-02-05 22:01:00

标签: arrays swift struct

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

这样的结构:

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

的所有元素

2 个答案:

答案 0 :(得分:2)

let filteredData = basicData.filter({$0.n0 > 5 && $0.n0 < 50 && $0.n2 > 7 && $0.n2 < 40})

答案 1 :(得分:2)

正如@Hamish在评论中已经提到的那样,你应该使你的结构属性成为非选项:

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

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

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