当前位置: 首页 > 面试题库 >

在Swift中按值对字典排序

闻修筠
2023-03-14
问题内容

是否有-(NSArray *)keysSortedByValueUsingSelector:(SEL)comparator的类似物?

如何在不强制转换为NSDictionary的情况下执行此操作?

我试过了,但这似乎不是一个好的解决方案。

var values = Array(dict.values)
values.sort({
    $0 > $1
    })

for number in values {
    for (key, value) in dict {
        if value == number {
            println(key + " : \(value)");
            dict.removeValueForKey(key);
            break
        }
    }
}

例:

var dict = ["cola" : 10, "fanta" : 12, "sprite" : 8]
dict.sortedKeysByValues(>) // fanta (12), cola(10), sprite(8)

问题答案:

尝试:

let dict = ["a":1, "c":3, "b":2]

extension Dictionary {
    func sortedKeys(isOrderedBefore:(Key,Key) -> Bool) -> [Key] {
        return Array(self.keys).sort(isOrderedBefore)
    }

    // Slower because of a lot of lookups, but probably takes less memory (this is equivalent to Pascals answer in an generic extension)
    func sortedKeysByValue(isOrderedBefore:(Value, Value) -> Bool) -> [Key] {
        return sortedKeys {
            isOrderedBefore(self[$0]!, self[$1]!)
        }
    }

    // Faster because of no lookups, may take more memory because of duplicating contents
    func keysSortedByValue(isOrderedBefore:(Value, Value) -> Bool) -> [Key] {
        return Array(self)
            .sort() {
                let (_, lv) = $0
                let (_, rv) = $1
                return isOrderedBefore(lv, rv)
            }
            .map {
                let (k, _) = $0
                return k
            }
    }
}

dict.keysSortedByValue(<)
dict.keysSortedByValue(>)

更新:

从beta
3更新到新的数组语法和排序语义。请注意,我正在使用,sort而不是sorted在最大程度上减少数组复制。该代码可以做得更紧凑,通过查看早期版本,并取代sortsorted和固定的KeyType[][KeyType]

更新到Swift 2.2:

从变更类型KeyTypeKeyValueTypeValue。使用新的sort内置函数来Array代替sort(Array)
Note可以通过使用sortInPlace代替来稍微改善所有这些的性能。sort



 类似资料:
  • 问题内容: 我知道这个话题已经讨论过了,但是我无法解决寻找其他答案的问题,因此,对不起我了! 我需要按键对字典进行排序 所以我需要这样的字典 但是我做不到 我试过了 但是在我需要从该字典创建两个数组(键和值)之后,并使用该解决方案 给我错误 ’[((String,String)]]’没有名为’keys’的成员, 因为该解决方案未完全返回字典。 所以我尝试了另一种解决方案: 哪个效果很好,但是我不知

  • 问题内容: 如何根据值对字典进行排序,以便输出为: 当前尝试(排序不正确): 问题答案: 您需要对字典值而不是键进行排序。您可以从字典中创建一个元组数组,按其值对它进行排序,如下所示: Xcode 9•Swift 4 或 Xcode 8•Swift 3 使用按键对字典进行排序 使用字典的键和本地化的比较来对字典进行排序:

  • 问题内容: 我有一个从数据库中的两个字段读取的值字典:字符串字段和数字字段。字符串字段是唯一的,因此这是字典的键。 我可以对键进行排序,但是如何根据值进行排序? 问题答案: Python 3.7+或CPython 3.6 字典在Python 3.7+中保留插入顺序。在CPython 3.6中相同,但是它是一个实现细节。 要么 较旧的Python 无法对字典进行排序,只能获得已排序字典的表示形式。字

  • 问题内容: 我有一组字典,我想通过每个字典中的“ itemName”键按字母顺序对它们进行排序。如何在Swift中执行此操作? 我想对itemsArray进行排序。 问题答案: 您可以使用的功能: 迅捷 > 3 不是很迅速,但您失去了类型安全性,但这确实起作用。 顺便说一句,您的代码中有很多强制转换,有可能导致应用程序崩溃,您应该考虑改用可选的转换。

  • 问题内容: 我想在Swift中对字典进行排序。我有一本字典,例如: 等,我希望它像 等等 我在SO上尝试了许多解决方案,但没有人为我工作。我正在使用XCode6 Beta 5,在它上面有一些正在给编译器错误,在一些解决方案中有例外。因此,任何可以发布字典排序工作副本的人。 问题答案: 编辑: 上面代码中的排序数组仅包含键,而值必须从原始字典中检索。但是,也是(键,值)对的一对,我们可以使用全局函数

  • 问题内容: 我有一本字典,其中包含以下数据: 我想按double值对字典排序。我做了一些研究,但所有示例均不支持当前版本的Swift 我试过在Swift中按值使用SortDictionary中的这段代码: 但这是行不通的。如何按字典值对字典排序? 问题答案: 目前尚不清楚您的期望是什么。确实没有排序字典这样的东西。您的代码基本上是正确的,但括号位置错误。我尝试了这个: 结果: 如果您认为这是错误的