arrays - 如何按多个元素过滤数组并在 Swift 中找到总和?

标签 arrays swift

我正在尝试按某些元素过滤我的数组。我希望记录类型包含“收入”并且 createdAt 等于一个日期,但是 $0.createdAt! 是一个日期类型,所以我不能使用 .contain(""),我可以使用什么?

recordFilter = record.filter { $0.recordtype!.contains("Income") /*|| $0.createdAt! = recordItem.createdAt!*/}

recordFilter输出:(这个结果还没有被createdAt过滤)

[<Record: 0x600000099fa0> (entity: Record; id: 0xd0000000003c0000 <x-coredata://913F25A5-B2C9-4646-9091-5EFE7F906908/Record/p15> ; data: {
    accountbook = "first book";
    amount = "\U00a59.99";
    assest = nil;
    category = "\U6295\U8d44";
    createdAt = "2017-11-16 16:00:00 +0000";
    date = nil;
    id = 15;
    recordtype = "\U6536\U5165";
    remark = "";
    toAccBook = nil;
}), <Record: 0x600000099ff0> (entity: Record; id: 0xd000000000400000 <x-coredata://913F25A5-B2C9-4646-9091-5EFE7F906908/Record/p16> ; data: {
    accountbook = "first book";
    amount = "\U00a56.58";
    assest = nil;
    category = "\U5de5\U8d44";
    createdAt = "2017-11-16 16:00:00 +0000";
    date = nil;
    id = 16;
    recordtype = "\U6536\U5165";
    remark = "";
    toAccBook = nil;
})]

之后,我尝试获取数组中的所有金额字符串并对其求和。但是我发现当我使用这段代码时,它都是单独的字符串,我如何将它分组到数组中并对其求和,或者有任何其他方法可以做到这一点?

let sum = recordFilter.map({Int($0.amount!.dropFirst())})
//[nil, nil]

for i in 0..<recordFilter.count{
    if recordFilter[i].amount != nil{

        let amountList = recordFilter[i].amount!.dropFirst()
        print(amountList) // I found that it's separate string.
        //9.99
        //11.22
        // ...

        //let intArray = amountList.map { Int($0)!}
        //let sum = amountList.reduce(0, +)
        //print(sum)

    }
}

最佳答案

好吧,如果你想满足两种情况 (recordtype == Income && createdAt == Your Date) 那么为什么不使用 && 进行过滤?

recordFilter = record.filter { return $0.recordtype!.contains("Income") && $0.createdAt! == recordItem.createdAt!}

请试一试,如果我遗漏了什么,请告诉我?

如果你想在这里求和:

recordFilter.map{($0["amount"] as! Float)}.reduce(0, +)

关于arrays - 如何按多个元素过滤数组并在 Swift 中找到总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47343382/

相关文章:

c# - 如何使用 LINQ to Entities 获取字节数组长度?

php - 动态合并具有相同键的数组内部数组

generics - 如何在 Swift 中的泛型类上实现 NSCoding?

arrays - 对元组数组求和

ios - PayMill SDK iOS swift 3.0 Xcode 8.1

javascript - 对 JavaScript 数组对象中的项目进行分组

c - 在 C 中,无法获取数组来保存新值

php - 如何在 PHP 中返回从 MySQL 获取的数组

swift - 在数据库中实现[用户-订阅/订阅者]关系的最佳方法

swift - 在 vapor 3 中创建父子关系