0

我希望在数组中的每一行中交换第二个。我事先不知道数组的长度。但是,我确实知道它可以被 2 整除。

举个例子:

101 102 147 148

会成为

102 101 148 147

任何帮助将不胜感激。

谢谢

麦克风

4

3 回答 3

4

假设你的向量(“数组”是 sooo Fortran)是x.

even <- seq(from=2, to=length(x), by=2)
odd <- even - 1
xnew <- x
xnew[even] <- x[odd]
xnew[odd] <- x[even]

您可以使代码更简洁,但这可能更容易看到发生了什么。

于 2013-10-28T07:41:25.300 回答
1

这是一个函数版本,它将向量维数为矩阵,然后交换每一对循环并连接结果......

#  Your data
x <- c( 101 , 102 , 147 , 148 )

#  Simple function
swap <- function(x){
  c( apply( t( matrix( x , length( x ) /2  , byrow = TRUE ) ) , 2 , rev ) )
}

swap( x )
# [1] 102 101 148 147

swap( 1:10 )
# [1]  2  1  4  3  6  5  8  7 10  9

这是第二个更快的解决方案,它消除了使用apply和使用完全矢量化的操作......

swap2 <- function(x){
  id <- seq_along( x ) %% 2 == 0
  c( t( matrix( c(x[id],x[!id]) , sum(id) ) ) )
}

swap2(1:10)
# [1]  2  1  4  3  6  5  8  7 10  9
于 2013-10-28T08:58:29.093 回答
0

我想使用 for 循环很简单

for( i=0 ;i< arr.length;i+=2) { 交换(arr[i],arr[i+1]) }

于 2013-10-28T07:35:24.193 回答