2017-06-27 19 views
1

私は200アイテムの配列を持っています。これらは、trueまたはfalseのいずれかです:Swift - 配列のアイテムを特定の値で数えるにはどうすればよいですか?

let shouldMascotChangeVotes: [Bool] = [false, false, false, true, false, true, true, true, false, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, false, true, true, false, true, false, false, true, false, true, true, false, false, true, false, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, false, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, false, false, false, false, true, true, true, false, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, false, true, true, false, true, false, false, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, false, true, true, false, true, true, true, false, false, false, true, false, true, false, true, true, true, true, false, true, false, false, true, true, true, true, true, false] 

私は、配列内のアイテム数をカウントする方法を知っているが、私は、アレイ内のちょうど真または偽の値をカウントできるようにする必要があります。それ、どうやったら出来るの?

shouldMascotChangeVotes.count // returns 200 

答えて

1

あなたの実際のパフォーマンスがどれほど重要かはわかりませんが、そのようなことを行うことができます。

import UIKit 

let shouldMascotChangeVotes: [Bool] = [false, false, false, true, false, true, true, true, false, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, false, true, true, false, true, false, false, true, false, true, true, false, false, true, false, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, false, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, false, false, false, false, true, true, true, false, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, false, true, true, false, true, false, false, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, false, true, true, false, true, true, true, false, false, false, true, false, true, false, true, true, true, true, false, true, false, false, true, true, true, true, true, false] 

let countableSet = NSCountedSet() 

shouldMascotChangeVotes.forEach { (item: Bool) in 
    countableSet.add(item) 
} 

debugPrint(countableSet.count(for: true)) // 125 
debugPrint(countableSet.count(for: false)) // 75 

注:そうでないかもしれない最も効果的な解決策が、それは仕事をしません。そのスニペットはPlaygroundから直接来ています。

+0

古いObjective-Cコードを使っているようですね。私がプレイグラウンドでこれを試してみると、私はエラーになります。スウィフトにはこのような状況で動くものがありますか? – fmz

+0

?それは最新の_Swift_であり、魅力的な働きをしています - 私はすぐにプレイグラウンドから貼り付けました。その行を削除した場合は 'import UIKit'を追加してください。 – holex

+0

holex、はい、インポートUIKitを追加すると違いがありました。ありがとうございました。 – fmz

2
shouldMascotChangeVotes.filter{$0 == true}.count 

あなたは最初にそれをフィルタリングし、それをカウントすることができます。

+0

こんにちはTPN。私がそれを実行すると、次の結果が得られます:(201回)。何かがそうではありません。 – fmz

+0

コードに何も問題はありませんが、あなたは '{$ 0}'を使って簡単にすることができます。 – Sulthan

+0

はい私は知っています:)しかし、私は解決策をより良く伝えるためにそこに残すことにします。しかし、はい、あなたはそれがちょうど{$ 0} – TNguyen

1

また、reduce()を使用することもできます。私はプレゼンテーションの目的で2回それをしました。あなたは実際に合計数を使用して差をつけることができます。

let shouldMascotChangeVotes: [Bool] = [false, false, false, true, false, true, true, true, false, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, false, true, true, false, true, false, false, true, false, true, true, false, false, true, false, true, true, true, false, true, true, false, false, true, false, true, true, false, false, false, true, false, true, true, false, true, true, true, true, true, true, true, false, true, false, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, false, false, false, false, true, true, true, false, true, true, false, false, true, false, false, true, true, true, true, false, true, true, true, true, false, true, true, false, true, false, false, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, false, true, true, false, true, true, true, false, false, false, true, false, true, false, true, true, true, true, false, true, false, false, true, true, true, true, true, false] 

var trueFalseCount: (trues: Int, falses: Int) 

trueFalseCount.trues = shouldMascotChangeVotes.reduce(0) { $0 + ($1 ? 1 : 0) } 
trueFalseCount.falses = shouldMascotChangeVotes.reduce(0) { $0 + ($1 ? 0 : 1) } 

print(trueFalseCount) // (trues: 125, falses: 75) 
関連する問題