【问题标题】:Sorting a struct array or dictionary in Swift在 Swift 中对结构数组或字典进行排序
【发布时间】: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 的所有键的数组,以按正确的顺序获取值,但我想知道是否有更清洁的解决方案。希望这能让您了解它应该如何工作。

标签: swift swift2


【解决方案1】:

根据定义,字典是包含无序键值对的集合类型。

有一些使用支持数组的有序字典的解决方案,例如earning-swift-ordered-dictionaries

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 2016-07-14
    • 2021-08-04
    • 2017-01-22
    • 2014-09-06
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多