保留Swift中声明的字典项的顺序?

Tru*_*an1 12 dictionary swift

创建键/值字典时,它将作为随机排序返回.我希望它们的顺序与它的创建顺序相同.

例如,请参阅以下代码:

var dict = [
    "kg": 1,
    "g": 2,
    "mg": 3,
    "lb": 4,
    "oz": 5,
    "t": 6
]

println(dict)
Run Code Online (Sandbox Code Playgroud)

这将返回以下内容:

[kg: 1, oz: 5, g: 2, mg: 3, lb: 4, t: 6]
Run Code Online (Sandbox Code Playgroud)

如何保留声明字典的顺序?

Car*_*ndo 28

斯威夫特 5.1:

当您需要键值对的有序集合并且不需要 Dictionary 类型提供的快速键查找时,请使用KeyValuePairs实例。

您使用 Swift 字典文字初始化 KeyValuePairs 实例。除了保持原始字典文字的顺序外,KeyValuePairs 还允许重复键。例如:

let recordTimes: KeyValuePairs = ["Florence Griffith-Joyner": 10.49,
                                  "Evelyn Ashford": 10.76,
                                  "Evelyn Ashford": 10.79,
                                  "Marlies Gohr": 10.81]

print(recordTimes.first!)
// Prints "("Florence Griffith-Joyner", 10.49)"
Run Code Online (Sandbox Code Playgroud)


Mar*_*n R 14

在您的情况下,自定义对象数组可能更合适.这是一个简单的示例,应该有助于您入门:

struct Unit : Printable {
    let name: String
    let factor: Double

    // println() should print just the unit name:
    var description: String { return name }
}


let units = [
    Unit(name: "kg", factor: 1000.0),
    Unit(name: "g", factor: 1.0),
    Unit(name: "mg", factor: 0.001),
    Unit(name: "lb", factor: 453.592292),
    Unit(name: "oz", factor: 28.349523)
]

println(units) // [kg, g, mg, lb, oz]
Run Code Online (Sandbox Code Playgroud)

(我不确定非公制单位因素是否正确:)


Jav*_*ont 5

正如Apple所说:

字典是键值关联的无序集合.

链接:https: //developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html

不知道这是否会对你有帮助,但在这个链接中有一个ordereddictionary的实现:http://www.raywenderlich.com/82572/swift-generics-tutorial