反转原始数组

时间:2016-06-27 13:42:43

标签: ruby

我试图扭转这个数组,并开始让数组的一半结束成为上半部分。我的输出是否正在跳过将9放入数组[0]?我有数组[0] = tem [9-0-1]所以数组[0] = temp [8]?这不是真的吗?

def sameArray(array)
  temp = array
  for i in array[0]..(((array.length)/2).floor)
      array[i] = temp[array.length - i - 1]
      ##puts array[i]
  end
end

sameArray([1,2,3,4,5,6,7,8,9])

# array[0] => array[8]
#array[1] => array[7]
#array[2] => array[6]
#array[3] => array[5]

4 个答案:

答案 0 :(得分:3)

您的计划中存在一些问题:

  1. 你并没有真正交换索引iarray.length - i - 1的值,因此,数组没有完全颠倒
  2. 您的方法不返回更新后的数组,而是返回for循环的结果,即[1..4]范围。
  3. 您的for循环错误地使用array[0]作为范围中的第一个值,而它应该只是0
  4. temp实际上不是array的副本,它只是对array的另一个引用,因此,如果进行了任何更改,最终会修改array使用temp
  5. 根据以上观察,这是一个更新的方法:

    def sameArray(array)
      temp = array.dup
      for i in 0..(((temp.length)/2).floor)
           temp[i], temp[-i-1] = temp[-i-1], temp[i]
      end
      return temp
    end
    

    请注意,temp.length - i - 1可以写为-i-1,与-1索引表示数组的最后一个元素的方式相同。

    通过使用一些惯用的Ruby,我们可以删除临时变量temp并使用each代替for循环。这是一个代码版本,可以被认为是更惯用的Ruby。

    def reverse(array)
      array.dup.tap do |a|
        (0..a.length/2).each do |i|
          a[i], a[-i-1] = a[-i-1], a[i]
        end
      end
    end
    

答案 1 :(得分:2)

def sameArray(array)
    len = array.size
    i = 0
    j = len - 1
    while i < j do
       temp = array[i]
       array[i] = array[j]
       array[j] = temp
       i = i+1
       j = j-1
    end
end

你可以用更简单的方式做到这一点

def sameArray(array)
    array.reverse
end

答案 2 :(得分:0)

您只需一种方法即可解决此问题:Array#reverse!

Cache-Control:no-cache  
Connection:close  
Content-Type:application/json

Response content:  
array(7) {  
  ["product_id"]=>  
  string(1) "5"  
  ["paidprice"]=>  
  string(2) "85"  
  ["condition"]=>  
  string(8) "Sehr Gut"  
  ["ovp1"]=>  
  string(1) "0"  
  ["ovp2"]=>  
  string(1) "0"  
  ["ovp3"]=>  
  string(1) "0"  
  ["ovp4"]=>  
  string(1) "0"  
}  
{"full_price":"85","updated_at":"2016-06-27 14:01:55","created_at":"2016-06-27 14:01:55","id":73,"created_by_id":1,"customer_id":1}

答案 3 :(得分:0)

根据您的方式,代码如下工作

def sameArray(array)
  temp = array
  for i in 0...array.length/2
    t = array[i]
    array[i] = temp[array.length - i - 1]
    temp[array.length - i - 1] = t
    ##puts array[i]
  end

end

sameArray([1,2,3,4,5,6,7,8,9])