迅速。如何遍历字典值:var a:[String:[String]]?

时间:2019-12-04 11:45:39

标签: ios swift dictionary

我需要使用for循环遍历Dictionary值(值=数组)。和 在每个数组中以相反的顺序排序。我该怎么办?

var a: [String : [String]]

预期结果如下:

["C": ["Camilla", "Cecelia", "Colette"], "B": ["Ben", "Bob"], "A": ["Alex", "Andy"]]

UPD:

我有功能:

func someFunc(array: [String]) -> [String : [String]] {
    let groupedDictionary  = Dictionary (grouping: array, by:  { String($0.first!) }nc).filter{ $0.value.count > 1 }

我有一些数组:

var array = ["Camilla", "Andy", "Bob", "Ben", "Alex", "Colette", "Camilla"]

5 个答案:

答案 0 :(得分:1)

一旦通过分组从数组中创建了字典,就可以使用for循环来过滤大小和排序

func someFunc(array: [String]) -> [String : [String]] {
    let groupedDictionary  = Dictionary (grouping: array, by:  { String($0.first!) })
    var result: [String: [String]] = [:]

    for (key, value) in groupedDictionary {
        if value.count > 1 {
            result[key] = value.sorted(by: >)
        }
    }

    return result
}

答案 1 :(得分:0)

字典没有顺序,但是您可以对键进行排序

var arr = Array(dic.keys) 
arr.sort(by:>)

然后使用arr

访问字典

答案 2 :(得分:0)

您可以这样做

let dictInitial = [ "A": ["Alex", "Andy"], "C": ["Camilla", "Cecelia", "Colette"], "B": ["Ben", "Bob"]]

let keys = Array(dictInitial.keys).sorted(by: >)


// get values

for key in keys {
    print("KEY:", key, "VALUES :", dictInitial[key]!)
}

输出:

KEY: C VALUES : ["Camilla", "Cecelia", "Colette"]
KEY: B VALUES : ["Ben", "Bob"]
KEY: A VALUES : ["Alex", "Andy"]

答案 3 :(得分:0)

@freddyK首先,您的someFunc代码中存在逻辑错误。您必须首先增强它,因为只有两个对象具有相同的字母时,它才会创建一个组。应该像{ $0.value.count > 0 }

以下代码段可以为您提供帮助。

let objDict = someFunc(array: ["Zoro", "Camilla", "Andy", "Bob", "Ben", "Alex", "Colette", "Camilla"])

let sortedDic = objDict.sorted { (aDic, bDic) -> Bool in
    return aDic.key > bDic.key
}
print(sortedDic) 

答案 4 :(得分:0)

@freddyk您的更新问题是部分正确的。您只需要按字典键的降序对字典进行排序即可。但您需要将字典格式从[string:[string]]更改为[(key: String, value: [String])] 两者相同,但是swift与数据类型高度相关,这就是为什么我们不能转换它的原因

 var a: [String] = ["Ben", "Bob","Camilla","Andy","Cecelia", "Colette","Alex"]
func someFunc(array: [String]) -> [(key: String, value: [String])] {
    let groupDict = Dictionary (grouping: array, by:  { String($0.first!) }).sorted { (str1, str2) -> Bool in
        return str1.key.compare(str2.key) == .orderedDescending
    }
    return groupDict

}
let groupedDictionary = someFunc(array: a)
print(groupedDictionary)

所以它的输出将如下所示

输出:[(键:“ C”,值:[“ Camilla”,“ Cecelia”,“ Colette”]),(键:“ B”,值:[“ Ben”,“ Bob” ]),(键:“ A”,值:[“ Andy”,“ Alex”])]