如何使用ExSwift Array.toDictionary?

时间:2015-05-12 06:26:17

标签: arrays swift dictionary

ExSwift有一个数组扩展名:

    /**
    Converts the array to a dictionary with keys and values supplied via the transform function.

    :param: transform
    :returns: A dictionary
*/
func toDictionary <K, V> (transform: (Element) -> (key: K, value: V)?) -> [K: V] {
    var result: [K: V] = [:]
    for item in self {
        if let entry = transform(item) {
            result[entry.key] = entry.value
        }
    }

    return result
}

然而,ExSwift Wiki仅显示了另一个toDictionary()方法签名的示例。我还不太熟悉这些方法签名的工作方式。所以我想知道是否有人可以给我看一个如何使用上述方法调用的例子?

2 个答案:

答案 0 :(得分:1)

按照wiki中已经提到的示例,我们可以猜测第二种toDictionary()方法的使用:

class Person {
    let name: String, age: Int, id: String
    init(_ name: String, _ age: Int, _ id: String){
        self.name = name
        self.age = age
        self.id = id
    }
}

let people = [
    Person("bob", 25, "P1"),
    Person("frank", 45, "P2"),
    Person("ian", 35, "P3")
]

let dictionary = people.toDictionary { $0.name, $0.age }
// → ["bob": 25, "frank": 45, "ian": 35]

答案 1 :(得分:1)

你需要提供一个闭包,它接受数组的参数元素并返回键 - 值对。

假设您有一组键,并且想要为每个键创建一个默认值的字典(假设为0):

let keys = ["a", "b", "c"]
let dictionary = keys.toDictionary { element in
    return (element, 0)
}