2017-11-17 4 views
0

いくつかの要素で配列をフィルタリングしようとしています。私はrecordtypeが "収入"とcreatedAt日付に等しいが含まれているが、は日付の種類ですので、私は.contain("")を使用することはできません、私は何を使用できますか?複数の要素で配列をフィルタリングし、Swiftでその合計を見つける方法は?

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) 

    } 
} 
+0

あなたの質問には、多くのことが明らかではありません。他のユーザーが簡単に理解できるように、いくつかの余分なコードと適切な説明を与えます。 @ワンjern –

+0

大丈夫、質問を編集しました@VishalPatel –

答えて

1

さて、あなたは2例(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, +) 
+0

ありがとう!その後どのくらいの金額を手に入れることができますか?私はそれを合計したいので。 reduce(0、+) 'これのようなものですが、エラーが発生しました@Sohil R. Memon –

+0

文字列を隠すことができませんarray to int array –

+0

@WanJern Amountは 'String'、' Double'または 'Float'ですか? –