如何在Swift

时间:2015-07-10 08:21:48

标签: swift sorting dictionary contains

如何在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 

我想在将字典存储到数组后,它只会存储值。但现在我发现它实际上也存储了密钥。感谢所有回复此帖子的人。我很感激!

1 个答案:

答案 0 :(得分:0)