这是我应该知道的一个基本的事情,但是在深层次上并不知道,因此感到困惑。字典似乎是无序的键和值列表。我想创建一个有序的键和值列表,以便我可以排序和跟踪顺序。我认为这意味着我必须将字典转换为具有键和值以及索引值即0,1,2,3等的多维数组。
如果我的字典如下所示:
var myScores = [String: Float]()
myScores = ["player1":22,"player2":33]
如何将其转换为Array
,其中player1:22是第一个元素,player2:33是第二个元素?
修改
不创建struct的替代方法是以字典的形式创建一个空字典数组,然后将字典附加到数组中。
var myArray = [[String: Float]]()//note double brackets
propArray.append(myScores)
答案 0 :(得分:2)
你想要的是一系列结构。
struct Score {
let playerName: String
let score: Int
}
let scores = [Score(playerName: "player1", score: 22),
Score(playerName: "player2", score: 33),
]
let sortedScores = scores.sorted(by: { $0.playerName < $1.playerName })
要从字典中获取键值对很简单,但它会强制您使用元组,这不是特别友好的类型。即便如此,它也是这样做的:
let sortedScores = myScores.sorted { $0.key < $1.key }
这将创建:
[(key: "player1", value: 22.0), (key: "player2", value: 33.0)]
或者
for (name, score) in myScores.sorted(by: { $0.key < $1.key }) {
print(name, score)
}
答案 1 :(得分:0)
您可以保持字典不变。一种可能的解决方案是创建一个只包含所需顺序的键的数组。然后,您可以迭代键数组并访问字典的元素。
var myScores: [String:Float] = ["player1":22, "player2":33]
var myPlayers = myScores.keys.sorted()
for player in myPlayers {
let score = myScores[player]
}
当您想以某种特定顺序显示数据时,这种方法很有效,例如在表格视图中。