使用dict创建带有键的数组,并按dict值排序

时间:2017-02-01 14:46:20

标签: arrays swift sorting dictionary

我有一个字典,我想在tableview中迭代。一种方法是使用所有键创建一个数组,并在给定索引处获取键。但对于这个数组,我希望键按字典中的字母顺序排序。我该怎么做?

static let dict = [
            "0P0000KBNA": "Länsförsäkringar Europa Indexnära",
            "0P0000YVZ3": "Länsförsäkringar Global Indexnära",
            "0P0000J1JM": "Länsförsäkringar Sverige Indexnära",
            "0P00013668": "Länsförsäkringar Tillväxtmarknad Indexnära A",
            "0P0000K9E7": "Länsförsäkringar USA Indexnära",
            "0P00005U1J": "Avanza Zero"
        ]

        static let sortedKeys = Array(dict.keys) // How?

4 个答案:

答案 0 :(得分:3)

您只需按值对字典进行排序并映射密钥

let sortedKeys = dict.sorted{$0.value < $1.value}.map{$0.key}   // ["0P00005U1J", "0P0000KBNA", "0P0000YVZ3", "0P0000J1JM", "0P00013668", "0P0000K9E7"]

答案 1 :(得分:3)

作为@LeoDabus answer的一个小变体,您可以访问字典的keys属性,并根据每个键的相应value对此数组进行排序

let sortedKeys = dict.keys.sorted { dict[$0]! < dict[$1]! }
print(sortedKeys)
/* ["0P00005U1J", 
    "0P0000KBNA", 
    "0P0000YVZ3",
    "0P0000J1JM",
    "0P00013668", 
    "0P0000K9E7"] */

另请注意,通常应避免强制解包运算符!,但在这种特殊情况下,我们知道谓词闭包中的速记参数$0$1都提供给sorted(...)保证是字典中的有效键(因为你的字典是不可变的:所以这里没有异步风险)。

答案 2 :(得分:0)

首先,创建一个名为keysArray的新字符串数组。

其次,遍历您的字典数组并将所有键添加到新创建的数组中。

现在keysArray应该是键的数组。

第三,按如下排序sortedKeysArray

var sortedArray = sortedKeysArray.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending}

现在我们有了一系列已排序的密钥。

如果你需要有一个字典数组,那么创建一个名为sortedDictArray的新数组。然后遍历我们之前创建的sortedKeysArray并按键获取字典并将其添加到sortedDictArray。中提琴!

希望这能帮到你!

答案 3 :(得分:0)

有序字典

我使用了Lukas Kubanek创建的开源OrderedDictionary来解决这样的问题。

有关此库的使用,请参阅example playground