【发布时间】:2015-06-29 16:03:09
【问题描述】:
我有一个这样的结构字典(取自Swift: How to declare a 2d array (grid or matrix) in Swift to allow random insert,感谢@rintaro):
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
}
}
}
现在我想按 x 对这本字典进行排序,但我找不到实现此目的的方法。是否可以对字典进行排序?或者我应该使用数组而不是字典的解决方案?
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) - 如果我们知道您的推理,提供可能的解决方案可能会更容易 -
好的,我想用这个结构来映射一个整数坐标。坐标描述了网格中的一个字段,整数表示每个字段将在网格中移动多少个字段。我需要对数组进行排序,以便在实际移动字段时不会遇到问题。当然,我可以只循环一个包含 _storage 的所有键的数组,以按正确的顺序获取值,但我想知道是否有更清洁的解决方案。希望这能让您了解它应该如何工作。