如何在Swift中对字典进行排序?
我的字典声明:
var colorDictionary = Dictionary<Pixel, Int>() //pixel class stores RGB values of a pixel, Int stores the appearing times of the same color showing on the same image.
我的目标: 我需要字典中的元素按值(出现的颜色时间)从高到低排序。
我尝试了什么: 我在网上做过一些研究,我知道swift中的Dictionary没有提供sort函数。所以我写了下面的代码:
var tempArray = Array(colorDictionary.keys)
var sortedKeys: () = sort(&tempArray){
var obj1 = self.colorDictionary[$0]
var obj2 = self.colorDictionary[$1]
return obj1>obj2
}
println("the most color: \(colorDictionary[tempArray[0])")
我得到的输出:“最多颜色:可选(27)”//其中27是颜色的最高出现时间,即字典的值。
问题:我怎样才能让它返回密钥?
我的像素类:
//for making the hashvalue stuff equatable
func ==(lhs: Pixel, rhs: Pixel) -> Bool {
return lhs.hashValue == rhs.hashValue
}
//customized class for storing pixel info of an image
class Pixel: Hashable {
//RGB components from one pixel
let r: CGFloat
let g: CGFloat
let b: CGFloat
var y: CGFloat = 0
var u: CGFloat = 0
var v: CGFloat = 0
var theUIColorOfThisPixel:UIColor
//adding for make the key hashable
var hashValue: Int {
return theUIColorOfThisPixel.hashValue
}
init(_thePixel: UIColor){
r = _thePixel.components.red
g = _thePixel.components.green
b = _thePixel.components.blue
theUIColorOfThisPixel=UIColor(red: r, green: g, blue: b, alpha: 1)
rgbToYuv(r, _g: g, _b: b)
}
}
[问题解决] 我的解决方案 如果我将结果转换为Int(例如Int(colorDictionary [tempArray [0]]),它将只返回图像上最常见颜色的出现时间。为了获得像素的UIColor,我使用了:
var theMostUIColor: UIColor = tempArray[0].theUIColorOfThisPixel
我想在将字典存储到数组后,它只会存储值。但现在我发现它实际上也存储了密钥。感谢所有回复此帖子的人。我很感激!
答案 0 :(得分:0)