我来自 C# 世界,习惯于将数组作为引用类型。据我了解,在 swift 数组中是值类型,但它们试图作为参考值类型。
我实际上不知道如何问我需要什么(我认为当我需要知道答案才能提出问题时就是这种情况),但在 C# 中我会说我需要存储对 a 的内部数组的引用将锯齿状数组转换为局部变量。
考虑以下代码:
// a function to change row values in-place
func processRow(inout row : [Int], _ value : Int)
{
for col in 0..<row.count
{
row[col] = value;
}
}
// a function to change matrix values in-place
func processMatrix(inout matrix : [[Int]])
{
for rowIdx in 0..<matrix.count
{
// (1) Works with array in-place
processRow(&(matrix[rowIdx]), -1)
// (2) Creates local copy
var r = matrix[rowIdx]; // <--- What to write here to not make a copy but still have this local variable?
processRow(&r, -2);
}
}
var matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
processMatrix(&matrix)
print(matrix) // outputs [[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]]
此处为 Swift 沙箱http://swiftlang.ng.bluemix.net/#/repl/8608824e18317e19b32113e1aa08deeb4ec5ab96ed8cdbe1dbfb4e753e87d528
在这里,我想就地处理多维数组,这样我就不会创建数组的副本或数组的一部分。
在选项(1)中,我将所有内容更改为“-1”,它可以工作,但为此使用了附加功能。
在选项(2)中,我尝试使用局部变量来存储matrix[rowIdx]
,但它实际上创建了内部数组的副本——不是我想要的;使用此变量会更改数组的副本,而不是原始的。
我怎样才能达到选项(1)中的结果,但使用局部变量而不是函数?也就是说,如何获取对内部数组的引用并将其放入局部变量?
我会理解答案“这是不可能的”,但我希望这些答案伴随着一些 Apple 参考。