gpt4 book ai didi

ios - 简单的交换代码不能快速工作

转载 作者:可可西里 更新时间:2023-11-01 01:33:13 25 4
gpt4 key购买 nike

我正在尝试快速转置二维数组。但我不知道为什么交换没有发生。

转置后数组保持不变。我正在使用以下代码:

var array_4x4 = [[Int]](count: 4, repeatedValue: [Int](count: 4, repeatedValue: 4))

for i in 0..<4
{
for j in 0..<4
{
let temp = Int(arc4random_uniform((100 + 1)) - 1) + 1
array_4x4[i][j] = temp
}
}

for i in 0..<4
{
for j in 0..<4 // code in this loop is not working
{
let temp = array_4x4[i][j]

array_4x4[i][j] = array_4x4[j][i]

array_4x4[j][i] = temp
}
}

最佳答案

您的嵌套循环遍历所有可能的数组索引 (i, j) , 意思就是每个数组元素都与转置元素交换两次

例如,当i=1j=2 , (1, 2)(2, 1)交换数组元素。后来,当i=2j=1 ,这些元素被交换回来。

因此,矩阵最终与原始矩阵相同。

解决方案是只迭代 (i, j)i < j 配对,即只交换对角线以上的元素对角线下方的对应物:

for i in 0..<4 {
for j in (i + 1)..<4 {
let temp = array_4x4[i][j]
array_4x4[i][j] = array_4x4[j][i]
array_4x4[j][i] = temp
}
}

请注意,Swift 标准库已经有一个函数可以交换两个值:

for i in 0..<4 {
for j in (i + 1)..<4 {
swap(&array_4x4[i][j], &array_4x4[j][i])
}
}

为了完整起见:另一种解决方案是将转置矩阵计算为一个值,并将其分配给相同(或不同)的变量:

array_4x4 = (0..<4).map { i in (0..<4).map { j in array_4x4[j][i] } }

关于ios - 简单的交换代码不能快速工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38843030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com