У меня есть словарь структуры, как это (Взято из Swift: How to declare a 2d array (grid or matrix) in Swift to allow random insert, благодаря @rintaro):Сортировка массива структур или словарь в Swift
struct Matrix2D<KeyElem:Hashable, Value> {
var _storage:[KeyElem:[KeyElem:Value]] = [:]
subscript(x:KeyElem, y:KeyElem) -> Value? {
get {
return _storage[x]?[y]
}
set(val) {
if _storage[x] == nil {
_storage[x] = [:]
}
_storage[x]![y] = val
}
}
}
Теперь я хотел бы отсортировать этот словарь по х, но я могу найти способ достичь этого. Может ли событие сортировать словарь? Или я могу использовать решение с Array вместо словаря?
struct Matrix2D<T> {
var _storage:[[T?]] = []
subscript(x:Int, y:Int) -> T? {
get {
if _storage.count <= x {
return nil
}
if _storage[x].count <= y {
return nil
}
return _storage[x][y]
}
set(val) {
if _storage.count <= x {
let cols = [[T?]](count: x - _storage.count + 1, repeatedValue: [])
_storage.extend(cols)
}
if _storage[x].count <= y {
let rows = [T?](count: y - _storage[x].count + 1, repeatedValue: nil)
_storage[x].extend(rows)
}
_storage[x][y] = val
}
}
}
Благодарим за помощь!
, что ваша мотивация для сортировки? если это просто для более быстрого поиска, обратите внимание, что поиск словаря уже очень быстрый (следовательно, причина, по которой ключи соответствуют «Hashable») - если бы мы знали ваши рассуждения, возможно, было бы проще предложить возможное решение. – fqdn
Хорошо, я хочу использовать эту структуру для сопоставления координат с целым числом. Координаты описывают поле в сетке, целое число на сколько полей каждое поле будет перемещаться в сетке. Мне нужно отсортировать массив, что я не получу проблем, когда дело доходит до фактического перемещения полей. Конечно, я мог бы просто создать массив, содержащий все ключи _storage, чтобы получить значения в правильном порядке, но я задавался вопросом, было ли более чистое решение. Надеюсь, это даст вам представление о том, как это должно работать. – biedert