我如何在swift中对数组中的项进行分类?

时间:2016-03-30 03:36:12

标签: arrays xcode string swift sorting

在swift中,我想对现有数组中的项目进行分类,并将它们相应地放在一个新字符串中。

以下是我想要做的一个例子:

originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"]

resultingString = "hotdog x 3, fries x 2, coke x 2"

我将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

试试这个:

let originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"]
var dict = [String: Int]()

let resultString = originalArray.reduce(dict) { _, element in
    if dict[element] == nil {
        dict[element] = 1
    } else {
        dict[element]! += 1
    }
    return dict
}
.map { "\($0) x \($1)" }
.joinWithSeparator(", ")

如果你想保持数组的原始顺序(即:hotdog,fries,coke),代码会稍微复杂一点:

let originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"]
var dict = [String: (index: Int, count: Int)]()

let resultString = originalArray.enumerate()
    .reduce(dict) { _ , e in
        if let value = dict[e.element] {
            dict[e.element] = (index: value.index, count: value.count + 1)
        } else {
            dict[e.element] = (index: e.index, count: 1)
        }
        return dict
    }
    .sort { return $0.1.index < $1.1.index }
    .map { "\($0) x \($1.count)" }
    .joinWithSeparator(", ")

print(resultString)

答案 1 :(得分:2)

我认为这会对你有所帮助:

let originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"]
var resultingString = ""
var counts:[String:Int] = [:]
for item in originalArray {
    counts[item] = (counts[item] ?? 0) + 1

}
resultingString = counts.map { (key, value) -> String in
    return "\(key) x \(value)"
}.joinWithSeparator(",")

print(resultingString)

以下是输出:coke x 2, hotdog x 3, fries x 2