【问题标题】:How to sort a dictionary by an array value contained in the dictionary Swift如何按字典 Swift 中包含的数组值对字典进行排序
【发布时间】:2015-12-18 04:56:50
【问题描述】:

我有一个包含数组作为其元素的字典,我想按其中一个数组值排序。我找到的所有用于对单个元素而非数组进行排序的字典的解决方案。另外,我不明白 $0.0 是什么意思?下面是我正在尝试完成的代码示例。

var dict = ["Mike": [62, 160], "Jim": [72, 210], "Tony": [68, 187]]

//I want to sort by the height (array values [0]) from highest value to lowest.
//The output would look like this:

"Jim": [72, 210]
"Tony": [68,187]
"Mike": [62,160]

我对编码比较陌生,所以我真的不知道如何处理这个问题。

【问题讨论】:

    标签: arrays swift sorting dictionary


    【解决方案1】:

    看,你有字典要排序:

    let dict = ["Mike": [62, 160], "Jim": [72, 210], "Tony": [68, 187]]
    

    您想使用某个函数isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) -> Bool 对其进行排序,因此如果第一个元素应该高于第二个元素,则应将a > b 放入函数中,依此类推。

    let sortedDict = dict.sort { (first: (String, Array<Int>), second: (String, Array<Int>)) -> Bool in
        return first.1[0] > second.1[0]
    }
    

    同理:

    let sortedDict = dict.sort {
        return $0.1[0] > $1.1[0]
    }
    

    或者:

    let sortedDict = dict.sort { $0.1[0] > $1.1[0] }
    

    $0 表示您的函数变量的编号为 0,依此类推。 $0.0 表示您获得了第一个字典字段(在您的情况下是名称),而 $0.1 表示它是第二个字典字段(数组)。

    【讨论】:

    • 这正是我想要的。谢谢!
    【解决方案2】:

    您应该使用名称和这两个值创建一个对象(或结构,如果它更适合这种情况)。然后将所有对象存储在一个数组中,您就可以随意对其进行排序。

    class MyObject {
    
        let name: NSString!
        let aValue: Integer!
        let bValue: Integer!
    
        // MARK: - Memory Management
    
        init(name: NSString, aValue: Integer, bValue: Integer) {
            self.name = name
            self.aValue = aValue
            self.bValue = bValue
        }
    }
    

    然后在其他地方:

    let myArray = // fetch, set the values using init method and sort it
    

    【讨论】:

    • 所以我最初尝试了这个,但对于我正在研究的内容,我认为它不如字典那么好......但是,我可能最终会回到这样做,因为我已经了解了更多关于排序的知识
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多