按键的最后一个字符对字典中的元素进行分组 [iOS Swift 5]

TSM*_*TSM 4 dictionary ios swift swift5

我有一本字典,我想按键的最后一个字符进行分组。这是字典:

var displayValues = ["volume_1": 1, "price_2": 6, "price_1": 2, "stock_1": 3, "volume_2": 5, "stock_2": 7]
Run Code Online (Sandbox Code Playgroud)

这是我用来对它们进行分组的代码

let groupValues = Dictionary(grouping: displayValues) { $0.key.last! }
print(groupValues)
Run Code Online (Sandbox Code Playgroud)

这是这段代码的结果

["2": [(key: "price_2", value: 6), (key: "volume_2", value: 5), (key: "stock_2", value: 7)], "1": [(key: "volume_1", value: 1), (key: "price_1", value: 2), (key: "stock_1", value: 3)]]
Run Code Online (Sandbox Code Playgroud)

分组是正确的,但是,如何从字典中删除单词keyvalue以便它显示以下内容?

[
  "2": ["price_2": 6, "volume_2" : 5, "stock_2": 7], 
  "1": ["volume_1": 1, "price_1": 2, "stock_1": 3]
]
Run Code Online (Sandbox Code Playgroud)

Pra*_*iya 5

你快到了!!

现在你有你想要的键和作为元组数组的值

您可以使用 new 将元组数组转换为字典 reduce(into:)

完整代码将是

    var displayValues = ["volume_1": 1, "price_2": 6, "price_1": 2, "stock_1": 3, "volume_2": 5, "stock_2": 7];
    let dict = Dictionary(grouping: displayValues) { $0.key.suffix(1)}
    let final = dict. mapValues { value  in
        return value.reduce(into: [:]) { $0[$1.key] = $1.value }
    }
    print(final)
Run Code Online (Sandbox Code Playgroud)

输出 :

[“2”:[“price_2”:6,“volume_2”:5,“stock_2”:7],“1”:[“price_1”:2,“stock_1”:3,“volume_1”:1]]

  • @PrashantTukadiya 我的评论已经做到了。只需将“compactMapValues”更改为“mapValues”,并使用后缀“String($0.key.suffix(1))”初始化一个新字符串 (2认同)