美文网首页
Swift 4中的新特性(Whatʼs New in Swift

Swift 4中的新特性(Whatʼs New in Swift

作者: sayHellooX | 来源:发表于2017-12-12 15:21 被阅读26次

Dictionary

  • 1: 创建
    可以通过序列或者包含元祖的数组去创建dic
let sque = zip(97..., ["a", "b", "c", "d", "e", "f"])
var dic = Dictionary(uniqueKeysWithValues: sque)
print(dic)
//[100: "d", 101: "e", 99: "c", 97: "a", 98: "b", 102: "f"]
let arr = Array(sque)
print(arr)
//[(97, "a"), (98, "b"), (99, "c"), (100, "d"), (101, "e"), (102, "f")]
dic = Dictionary(uniqueKeysWithValues: arr)
print(dic)
//[100: "d", 101: "e", 99: "c", 97: "a", 98: "b", 102: "f"]
  • 2:通过元祖数组创建dic并且过滤掉重复的键名
let arr = [("a", 2), ("b", 3), ("b", 4), ("a", 4)]
var dic = Dictionary.init(arr) { (first, _) in
      first
}
print(dic)
//["b": 3, "a": 2]
dic = Dictionary(arr) { (_, last) in
      last
}
print(dic)
//["b": 4, "a": 4]
  • 3:还可以做很多其他的操作,通过元祖序列,合并相同的键名,生成新的字典
let sortingHat = [
            ("a", "1"), ("b", "2"),
            ("c", "4"), ("d", "3"), ("e", "5"), ("a", "6"),
            ("a", "7"), ("b", "8"),
            ("c", "9"), ("f", "10")
        ]
let houses = Dictionary(
        sortingHat.map { ($0.0, [$0.1]) },
         uniquingKeysWith: { (current, new) in
         return current + new
})
print(houses)
//["b": ["2", "8"], "a": ["1", "6", "7"], "c": ["4", "9"], "e": ["5"], "f": ["10"], "d": ["3"]]

计算字符的个数

let str = "Sometimes affection is a shy flower that takes time to blossom."
var frequencies: [Character: Int] = [:]
let baseCounts = zip(
      str.filter { $0 != " " }.map { $0 },
      repeatElement(1, count: Int.max))
frequencies = Dictionary(baseCounts, uniquingKeysWith: +)
print(frequencies)
//["w": 1, "n": 1, ".": 1, "o": 6, "f": 3, "k": 1, "t": 7, "S": 1, "b": 1, "a": 4, "i": 4, "r": 1, "m": 4, "c": 1, "e": 6, "s": 6, "l": 2, "y": 1, "h": 2]

还有很多高级的用法,大家可以去查下资料

  • 4:给键名访问提供默认值
    在以前我们通过key获得Value时会获得一个optional类型的值,因为在字典中可能不存在这个键对应的值,如果要用的时候我们需要解包,而在Swift4中可以通过另外的方式添加默认值

let dic = ["a": 1, "b": 2, "c": 3]
var swift3 = dic["a"]  或者  
swift3 = dic["a"] ?? 0

var swift4 = dic["a", default: 0]

上面的例子可以通过如下的代码实现

let str = "Sometimes affection is a shy flower that takes time to blossom."
var frequencies: [Character: Int] = [:]
let newStr = str.filter { $0 != " "}
newStr.map {
     return frequencies[$0, default:0] += 1
}
print(frequencies)
//结果同上
  • 5:创建分组字典,可以根据提供的关键词,创建一个分组后的字典
let names = ["Harry", "ron", "Hermione", "Hannah", "neville", "pansy", "Padma"].map { $0.capitalized }
 let nameList = Dictionary(grouping: names) { $0.first!}
print(nameList)
//["H": ["Harry", "Hermione", "Hannah"], "R": ["Ron"], "N": ["Neville"], "P": ["Pansy", "Padma"]]

相关文章

网友评论

      本文标题:Swift 4中的新特性(Whatʼs New in Swift

      本文链接:https://www.haomeiwen.com/subject/ragiixtx.html