一個String數組我有一個大陣列那樣:排序斯威夫特
var tableau = ["Salut", "Hey", "Salut", "Hey", "Hey", "Mom", "Hey", "Dad", "Mom", "Hey", "Plop"]
,現在我想每個單詞的數組排序由重複這樣的數組像數:
var tableauTrier = ["Hey", "Salut", "Mom", "Dad", "Plop"]
如何使用最少的內存對它們進行排序? 請幫助我!
一個String數組我有一個大陣列那樣:排序斯威夫特
var tableau = ["Salut", "Hey", "Salut", "Hey", "Hey", "Mom", "Hey", "Dad", "Mom", "Hey", "Plop"]
,現在我想每個單詞的數組排序由重複這樣的數組像數:
var tableauTrier = ["Hey", "Salut", "Mom", "Dad", "Plop"]
如何使用最少的內存對它們進行排序? 請幫助我!
var tableau = ["Salut", "Hey", "Salut", "Hey", "Hey", "Mom", "Hey", "Dad", "Mom", "Hey", "Plop"]
var counts = [String: Int]()
// generate dictionary of counts for each word
for word in tableau {
counts[word] = (counts[word] ?? 0) + 1
}
// Sort the tuples based on the count and use map to extract the word
let result = counts.sorted { $0.value > $1.value }.map { $0.key }
print(result)
// ["Hey", "Mom", "Salut", "Plop", "Dad"]
一個小幫手陣列,就可以得到它像這樣:
var tableau = ["Salut", "Hey", "Salut", "Hey", "Hey", "Mom", "Hey", "Dad", "Mom", "Hey", "Plop"]
var unique = Array(Set(tableau))
unique.sort { (str1, str2) -> Bool in
let str1Count = tableau.reduce(0, { (result, str) -> Int in
return str == str1 ? result+1 : result
})
let str2Count = tableau.reduce(0, { (result, str) -> Int in
return str == str2 ? result+1 : result
})
return str1Count > str2Count
}
或者 - 只是爲了好玩 - 有NSCountedSet
let tableau = ["Salut", "Hey", "Salut", "Hey", "Hey", "Mom", "Hey", "Dad", "Mom", "Hey", "Plop"]
let set = NSCountedSet(array: tableau)
let array = (set.allObjects as! [String]).sorted(by: {set.count(for: $0) > set.count(for: $1)})
print(array)
// [Hey, Mom, Salut, Dad, Plop]
這裏的解決方案是一個解決方案:
var result = tableau.sorted(by: { current, next in
tableau.filter { $0 == current }.count > tableau.filter { $0 == next }.count
}).reduce([String](), {
if $0.contains($1) {
return $0
} else {
var newPartial = $0
newPartial.append($1)
return newPartial
}
})
print(result) // ["Hey", "Salut", "Mom", "Dad", "Plop"]
Ops誤讀了這個問題。將修改答案.. – paulvs
對於bett因爲Swift 3的可讀性(我認爲)它也可以寫成'counts.sorted {$ 0.value> $ 1.value} .map {$ 0.key}' –
我喜歡那個@LeoDabus。它使解決方案更加明顯地正確。使用IBM Swift Sandbox進行快速檢查可以驗證此功能是否確實隨Swift 3.0一起提供。 – vacawama