在 2 个以上的数组之间交换元素
Swapping elements between more than 2 arrays
在单个数组 (x) 中交换元素是计算机科学中的经典问题。在像 C 这样的低级语言中,直接的(但绝不是唯一的,例如 XOR)解决方案是使用临时变量:
x[0] = tmp
x[0] = x[1]
x[1] = tmp
上述算法交换了x的第一个和第二个元素。
在两个子数组 x 和 y 之间交换元素是相似的
x[0] = tmp
x[0] = y[1]
y[1] = tmp
对于 3 个数组的情况,添加的限制是数组 1 的元素必须与数组 2 的元素交换以及数组 2 的元素必须与数组 3 的元素交换?数组 1 和 3 中的元素不会相互交换。
如何将这种方法(具有附加限制)推广到 k 个数组?
如果数组堆叠成矩阵,您可以滞后行以创建所需的动作
k <- 6
#generate dummy data with k rows and 3 columns
mat <- matrix(seq_len(3*k), nrow=k, byrow=TRUE)
mat
#lag the matrix
mat[c(seq_len(k)[-1], 1),]
您可以创建一个 for 循环来重复您的指令集:
l=list(x = c(1,2,3,4,5),y = c(5,4,3,2,1),z = c(6,7,8,9,10))
swap_elements <- function(l)
{
for(i in 1:(length(l)-1))
{
tmp = l[[i]][1]
l[[i]][1] = l[[i+1]][2]
l[[i+1]][2] = tmp
}
return(l)
}
输出:
> swap_elements(l)
$x
[1] 4 2 3 4 5
$y
[1] 7 1 3 2 1
$z
[1] 6 5 8 9 10
在单个数组 (x) 中交换元素是计算机科学中的经典问题。在像 C 这样的低级语言中,直接的(但绝不是唯一的,例如 XOR)解决方案是使用临时变量:
x[0] = tmp
x[0] = x[1]
x[1] = tmp
上述算法交换了x的第一个和第二个元素。
在两个子数组 x 和 y 之间交换元素是相似的
x[0] = tmp
x[0] = y[1]
y[1] = tmp
对于 3 个数组的情况,添加的限制是数组 1 的元素必须与数组 2 的元素交换以及数组 2 的元素必须与数组 3 的元素交换?数组 1 和 3 中的元素不会相互交换。
如何将这种方法(具有附加限制)推广到 k 个数组?
如果数组堆叠成矩阵,您可以滞后行以创建所需的动作
k <- 6
#generate dummy data with k rows and 3 columns
mat <- matrix(seq_len(3*k), nrow=k, byrow=TRUE)
mat
#lag the matrix
mat[c(seq_len(k)[-1], 1),]
您可以创建一个 for 循环来重复您的指令集:
l=list(x = c(1,2,3,4,5),y = c(5,4,3,2,1),z = c(6,7,8,9,10))
swap_elements <- function(l)
{
for(i in 1:(length(l)-1))
{
tmp = l[[i]][1]
l[[i]][1] = l[[i+1]][2]
l[[i+1]][2] = tmp
}
return(l)
}
输出:
> swap_elements(l)
$x
[1] 4 2 3 4 5
$y
[1] 7 1 3 2 1
$z
[1] 6 5 8 9 10