在对象数组中查找元素

时间:2016-12-13 16:09:23

标签: arrays swift

我创建了一个对象数组:

var fullMonthlyList = [SimulationMonthly]()

这里的课程:

class SimulationMonthly {
    var monthlyMonthDuration: NSNumber = 0
    var monthlyYearDuration: NSNumber = 0
    var monthlyFullAmount: NSNumber = 0
    var monthlyAmount: Int = 0

    init(monthlyMonthDuration: NSNumber, monthlyYearDuration: NSNumber, monthlyFullAmount: NSNumber, monthlyAmount: Int){
        self.monthlyMonthDuration = monthlyMonthDuration
        self.monthlyYearDuration = monthlyYearDuration
        self.monthlyFullAmount = monthlyFullAmount
        self.monthlyAmount = monthlyAmount
    }
}

我刚刚添加了填充它,现在我想查找它们是否是现有值,例如monthlyAmount等于" 194"通过在阵列中搜索,我该怎么办?我试过过滤器并包含但是我收到了错误。

我尝试过的事情:

if self.fullMonthlyList.filter({ $0.monthlyAmount == self.monthlyAmount.intValue }) { ... }

错误:

  

无法调用'过滤'使用类型'的参数列表((SimulationMonthly)throws - > Bool)'

2 个答案:

答案 0 :(得分:3)

你可以这样做:

if let sim = fullMonthlyList.first(where: { $0.monthlyAmount == 194 }) {
    // Do something with sim or print that the object exists...
}

这将为您提供数组中第一个monthlyAmount等于194的元素。

如果您想要所有元素,请使用filter

let result = fullMonthlyList.filter { $0.monthlyAmount == 194 }

如果您根本不需要该对象,但只是想知道某个对象是否存在,那么contains就足够了:

let result = fullMonthlyList.contains(where: { $0.monthlyAmount == 194 })

答案 1 :(得分:1)

这是一个基于匹配属性过滤对象的简单操场示例。您应该能够根据自己的情况进行扩展。

class Item {
    var value: Int

    init(_ val: Int) {
        value = val
    }
}

var items = [Item]()
for setting in 0..<5 {
    items.append(Item(setting))
}

func select(_ with: Int) -> [Item] {
    return items.filter { $0.value == with }
}

let found = select(3)