在两个以上的数组之间交换元素

时间:2018-01-24 06:41:11

标签: r swap

在单个数组(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阵列?

2 个答案:

答案 0 :(得分:0)

如果将数组堆叠成矩阵,则可以滞后行以创建所需的操作

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),]

答案 1 :(得分:0)

你可以创建一个重复你的指令集的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