为什么Swift打印只有一个for循环的多维数组

时间:2016-03-04 10:09:42

标签: arrays swift loops multidimensional-array

我在Swift中有以下代码:

var array: [[Int]] = [[6,8,1],
                      [3,3,3],
                      [2,1,2]];

for (var x=0;x<array.count;x++){
       print (array[x]);
   }
}

结果是:

6,8,1
3,3,3
2,1,2

为什么Swift使用1 for循环打印多维数组。我怎么样 行和列,如果我没有第二个for循环?

5 个答案:

答案 0 :(得分:1)

因为您要为每次迭代打印数组,所以 array [x] 数组本身

print([6,8,1])

相同

答案 1 :(得分:1)

您必须每行和每列访问它

for var i = 0 ; i < array.count; i++ {
    for var j = 0; j < array[i].count; j++ {
         print(array[i][j])
      }
}
i - Row
j - Column 

答案 2 :(得分:1)

Array类型采用print函数使用的CustomStringConvertible协议。实现是这样的,它列出了以逗号分隔的数组中的所有元素。对于阵列中的每个元素,将使用相同协议的实现。这就是为什么你可以按照你的方式打印它,实际上你甚至可以只打印array,甚至更多:

let array1 = [0, 1]
let array2 = [array1, array1]
let array3 = [array2, array2]
let array4 = [array3, array3]

print(array1) // [0, 1]
print(array2) // [[0, 1], [0, 1]]
print(array3) // [[[0, 1], [0, 1]], [[0, 1], [0, 1]]]
print(array4) // [[[[0, 1], [0, 1]], [[0, 1], [0, 1]]], [[[0, 1], [0, 1]], [[0, 1], [0, 1]]]]

答案 3 :(得分:0)

X增加到array.count

您的数组是一个包含数组的数组。因此它打印第1,然后是第2,第3行。

答案 4 :(得分:0)

var store: [[Int]] = [
    [6, 8, 1],
    [3, 3, 3],
    [2, 1, 2, 4],
    []
]
// returns optional value, if you pass wrong indexes, returns nil 
func getValue<T>(store:[[T]], row: Int, column: Int)->T? {
    // check valid indexes
    guard row >= 0 && column >= 0 else { return nil }
    guard row < store.count else { return nil }
    guard column < store[row].count else { return nil }

    return store[row][column]
}

let v31 = getValue(store, row: 3, column: 0) // nil
let v21 = getValue(store, row: 2, column: 1) // 1
let v01 = getValue(store, row: 0, column: 1) // 8
let v23 = getValue(store, row: 2, column: 3) // 4

let store2 = [["a","b"],["c","d"]]
let u11 = getValue(store2, row: 1, column: 1)

let store3:[[Any]] = [[1, 2, "a"],[1.1, 2.2, 3.3]]
let x02 = getValue(store3, row: 0, column: 2) // "a"
let x11 = getValue(store3, row: 1, column: 1) // 2.2