我正在创建一个测验,我有一系列的bool,我正试图找到一种方法来计算有多少“真实”&有“假”值,所以我可以将测验结果呈现给用户。我想将结果存储在我稍后可以调用的变量中。
我看过set集合类型,但似乎无法绕过它。我将初学者设定为布尔吗?
answersArray = [true, false, true, false, true, false, true]
trueAnswersCount = set<Bool>()
答案 0 :(得分:3)
您不能只使用原生的Set类型,因为Set不会保留重复值。例如,以下内容将发出{false, true}
。
let answersArray = [true, false, true, false, true, false, true]
let trueAnswersCount = Set<Bool>(answersArray)
如果您愿意使用Cocoa Touch中的类,NSCountedSet可以简化这一点。
let answersArray = [true, false, true, false, true, false, true]
let countedSet = NSCountedSet()
countedSet.addObjectsFromArray(answersArray)
countedSet.countForObject(false) // 3
countedSet.countForObject(true) // 4
NSCountedSet仍然是一个Set,只存储唯一值,但它也跟踪每个唯一元素添加到它的次数。
答案 1 :(得分:2)
为什么不使用filter()
?
answersArray = [true, false, true, false, true, false, true]
let trueCount = answersArray.filter { $0 == true }.count
let falseCount = answersArray.filter { $0 == false }.count
答案 2 :(得分:1)
您可以简单地遍历数组,并在每次值为true时递增1。
这是一个简单的例子:
var answersArray : [Bool]
answersArray = [true, false, true, false, true, false, true]
var nbTrueAnswers : Int = 0
for value in answersArray {
if (value == true) {
nbTrueAnswers++;
}
}
println("nbTrueAnswers : \(nbTrueAnswers)")
或者看到它:http://swiftstub.com/184888077/
如果有帮助,请告诉我:)。
答案 3 :(得分:0)
你可以创建一个带有SequenceType
和值的函数,并返回提供的值与序列中元素匹配的次数:
func countMatches<Seq: SequenceType where Seq.Generator.Element: Equatable>
(arr: Seq, v: Seq.Generator.Element) -> Int {
return arr.reduce(0) {
if $1 == v { return $0 + 1 }
return $0
}
}
let answersArray = [true, false, true, false, true, false, true]
countMatches(answersArray, true) // 4
countMatches(answersArray, false) // 3
或者,对于Swift 2:
extension SequenceType where Generator.Element: Equatable {
func countMatches(v: Generator.Element) -> Int {
return reduce(0) {
if $1 == v { return $0 + 1 }
return $0
}
}
}
let answersArray = [true, false, true, false, true, false, true]
answersArray.countMatches(true) // 4
answersArray.countMatches(false) // 3
答案 4 :(得分:0)
您可以轻松使用Swift的函数编程功能为您的问题获得一个非常简洁的解决方案:
lock(_lock_) //whose there? it's me, I kill you! oops sorry that was knock knock
{
//do what you want
}
答案 5 :(得分:0)
var wordCounts = [String: Int]()
var allWords = ["this","is","a","test","this","is", "another", "test"]
for word in allWords {
if wordCounts[word] == nil {
wordCounts[word] = 1
} else {
wordCounts[word]! += 1
}
}
print(wordCounts) // prints: ["a": 1, "this": 2, "test": 2, "another": 1, "is": 2]
print(wordCounts["this"]!) // get the count of word "this": 2
allWords = Array(wordCounts.keys) // remove duplicates
甚至更快:
var wordCounts: NSCountedSet!
var allWords = [true, true, false, false, false, false, true, false] as [Any]
wordCounts = NSCountedSet(array: allWords)
print(wordCounts.count(for: true)) // print: 3