IOS Swift 2 - 如何构造多维数组

时间:2016-08-15 14:15:35

标签: ios arrays swift

如何实现以下输出:

rsPool[0][p1] = "123"
rsPool[0][p2] = "234"
rsPool[1][p1] = "abc"
rsPool[1][p2] = "bcd"

我从JSON输出反序列化,它具有以下数据

first dimention > type (1 to 7)
second dimention > p1...P10
value > xxxx

我试图创建:

var rspool : [Int: String] : [] 

但我不知道如何添加/附加到数组。

2 个答案:

答案 0 :(得分:2)

您可以多次使用方括号来定义多维数组:

var rspool: [[String]] = [["123", "234"], ["abc", "bcd"]]
print(rspool[0][0])
print(rspool[0][1])
print(rspool[1][0])
print(rspool[1][1])
//123
//234
//abc
//bcd

这是String

的数组数组

动态数组

通常使用动态更改的数组大小,使用ArrayappendinsertremoveAtIndex方法。让我们从空数组中给出给定的数组:

var rspool = [[String]]()

rspool.append([String]()) //adding first line; now we can access it by rspool[0]
rspool[0].append("abc")
rspool[0].append("bcd")

//we started from second line for to show example with insert:
rspool.insert([String](), atIndex: 0) //inserting new line as first line
rspool[0].append("123")
rspool[0].append("234")
print(rspool)
//[["123", "234"], ["abc", "bcd"]]

您需要始终小心通过索引访问此数组,因为您可以接收"索引超出范围"例外。您可以通过索引直接读取和覆盖数组中已存在的值:

let veryFirst = raspol[0][0]
raspol[0][0] = "456"

静态数组

如果您希望仅通过索引(也就是矩阵样式)操作数组,则需要设置常量尺寸并首先初始化所有数组。 Optional类型为元素类型,重复值非常有用:

let m = 3
let n = 5
var rspool = [[String?]](count: m, repeatedValue: [String?](count: n, repeatedValue: nil))

现在您可以通过索引读取写元素:

rspool[0][0] = "123"
rspool[0][1] = "234"
rspool[1][0] = "abc"
rspool[1][1] = "bcd"
print(rspool)
//[[Optional("123"), Optional("234"), nil, nil, nil], [Optional("abc"), Optional("bcd"), nil, nil, nil], [nil, nil, nil, nil, nil]]

矩阵式数组计算示例:

rspool[2][4] = "END"
for i in 0..<m {
    for j in 0..<n {
        print("\(rspool[i][j] ?? ".")\t", terminator: "")
    }
    print()
}
//123 234 .   .   .
//abc bcd .   .   .
//.   .   .   .   END

答案 1 :(得分:0)

您的数据似乎是这样的:

var rsPool = [
    [
        "p1": "123",
        "p2": "234"
    ],
    [
        "p1": "abc",
        "p2": "bcd"
    ]
]

类型为[Dictionary<String, String>]

所以声明应该是:

var rsPool: [[String:String]]

这是游乐场参考: play