我试图创建整数的2D数组:
var arr: [[Int]] = []
arr[0][0] = [123, 456, 789]
但我在第二行收到以下错误:
error: contextual type 'Int' cannot be used with array literal
arr[0][0] = [123, 456, 789]
你们中的任何人都知道如何将int值添加到2D数组中而没有错误?
我想在2D数组中添加以下值:
[123, 456, 789]
[2, 3, 5]
[100, 300, 400]
我非常感谢你的帮助。
答案 0 :(得分:2)
arr[0][0]
是一个Int
,但您正在尝试为其[123, 456, 789]
分配[Int]
(又名Array<Int>
)
您可以嵌套数组文字来实现您想要的效果:
let array = [ //inferred type: [[Int]]
[123, 456, 789],
[ 2, 3, 5],
[100, 300, 400],
]
答案 1 :(得分:2)
我想在2D数组中添加以下值:
[123, 456, 789] [2, 3, 5] [100, 300, 400]
你可以通过几种不同的方式实现这一目标。
只需在数组初始化时包含子数组
var arr = [[123, 456, 789], [2, 3, 5], [100, 300, 400]]
这允许你让arr
成为不可变的(let arr = ...
),以防所有子数组在编译时都已知,并且你知道你不需要改变arr
在以后的时间。
如果在编译时未完全知道数组的内容:您可以使用append(...)
在可用时逐个添加子数组
如果在arr
实例化时子数组不可用,您可以使用数组+=
运算符或append(_:)
方法动态添加子数组提供数组到数组
var arr = [[Int]]()
// ... at some later (run-)time point
let somSubArrProvidedAtRuntime = [100, 300, 400]
arr.append(somSubArrProvidedAtRuntime)
// ....
作为append(_:)
的替代方案,使用append(contentsOf:)
鉴于上述情况相同,但同时提供了多个子数组,您可以使用append(contentsOf:)
方法一次将多个子数组附加到数组
// some (one) sub-arr known at initialization
var arr = [[123, 456, 789]]
// some sub-arrays provided at runtime, a time later
// than initialization
let subArrB = [2, 3, 5]
let subArrC = [100, 300, 400]
// ... using the `+=` operator for arrays
arr += [subArrB, subArrC]
// ... alternatively, using append(contentsOf:)
arr.append(contentsOf: [subArrB, subArrC])