Создать упорядоченный массив из словаря - PullRequest
0 голосов
/ 05 июня 2018

Это фундаментальная вещь, которую я должен знать, но не знаю на глубоком уровне, и поэтому нахожу запутанным.Словари кажутся неупорядоченным списком ключей и значений.Я хочу создать упорядоченный список ключей и значений, чтобы можно было сортировать и иным образом отслеживать порядок.Я думаю, что это означает, что я должен преобразовать словарь в многомерный массив, который имеет ключ и значение, а также значение индекса, т.е. 0,1,2,3 и т. Д.

Если мой словарь выглядит следующим образом:

var myScores = [String: Float]()
myScores = ["player1":22,"player2":33]

Как мне преобразовать его в Array, где player1: 22 - первый элемент, а player2: 33 - второй элемент?

Редактировать:

Альтернативой без создания структуры является создание пустого массива словарей в форме словаря, а затем добавление словаря в массив.

var myArray = [[String: Float]]()//note double brackets
propArray.append(myScores)

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы можете оставить словарь как есть.Одним из возможных решений является создание массива, который содержит только ключи в нужном порядке.Затем вы можете выполнить итерацию массива ключей и получить доступ к элементам словаря.

var myScores: [String:Float] = ["player1":22, "player2":33]
var myPlayers = myScores.keys.sorted()

for player in myPlayers {
    let score = myScores[player]
}

Это работает, когда вы хотите отобразить данные в определенном порядке, например в табличном представлении.

0 голосов
/ 05 июня 2018

То, что вы хотите, это массив структур.

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...