bbw*_*ner 5 arrays dictionary swift
我只想将一个玩家名称数组转换成字典记分牌,给每个人一个初始分数为0.
含义...
var playerNames = ["Harry", "Ron", "Hermione"]
Run Code Online (Sandbox Code Playgroud)
变得 ......
var scoreBoard: [String:Int] = [ "Ron":0, "Harry":0, "Hermione":0 ]
Run Code Online (Sandbox Code Playgroud)
这是我第一次提出一个问题,但我完全陷入了这么简单的困境,我发现的所有方法/问题都是以某种方式解决的.我尝试过以各种方式使用reduce,但最终总是很短.提前致谢!
小智 15
这是我喜欢使用的快速衬垫:
let scoreboard = playerNames.reduce(into: [String: Int]()) { $0[$1] = 0 }
Run Code Online (Sandbox Code Playgroud)
如果已知玩家名称各不相同,那么您可以
let playerNames = ["Harry", "Ron", "Hermione", "Ron"]
var scoreBoard = Dictionary(uniqueKeysWithValues: zip(playerNames,
repeatElement(0, count: playerNames.count)))
print(scoreBoard) // ["Harry": 0, "Ron": 0, "Hermione": 0]
Run Code Online (Sandbox Code Playgroud)
此处zip
用于创建一个玩家/得分对序列,从中创建字典。
备注:最初我曾经AnySequence { 0 }
生成零。亚历山大建议使用repeatElement()
代替,它的优点是将正确的所需容量传递给字典初始化器。
reduce
绝对是正确使用更困难的内置函数之一,但这就是您想要的。
let names = ["Harry", "Ron", "Hermione"]
let scoreboard: [String: Int] = names.reduce(into: [:], { result, next in
result[next] = 0
})
Run Code Online (Sandbox Code Playgroud)
它带有2个参数:初始值(在我们的示例中为空字典[:]
)和一个闭包,该闭包使用数组中的每个元素更新结果。此闭包有2个参数,result
和next
。我们要result
基于next
元素进行更新。我们的闭包通过将其设置result[next]
为0来实现。
您可以按照以下方法执行此操作:
var playerNames = ["Harry", "Ron", "Hermione"]
var dictionary = [String: Int]()
for player in playerNames {
dictionary[player] = 0
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1996 次 |
最近记录: |