我有一个关于如何更改数组元素索引的问题,因此它不会出现在7.位置而是出现在位置2 ...
是否有处理此功能的功能?
答案 0 :(得分:50)
没有比这更简单了:
array.insert(2, array.delete_at(7))
答案 1 :(得分:22)
irb> a = [2,5,4,6]
=> [2, 5, 4, 6]
irb> a.insert(1,a.delete_at(3))
=> [2, 6, 5, 4]
答案 2 :(得分:3)
如果您不关心阵列中其他元素的位置,可以使用.rotate! (注意,此方法末尾的!更改实际数组)方法。
arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr.rotate! -3
arr = [6, 7, 8, 1, 2, 3, 4, 5]
这将获取索引为7的元素8,并将其旋转为索引2。
答案 3 :(得分:2)
这些答案很棒。我正在寻找关于这些答案如何运作的更多解释。以下是上述答案中发生的事情,如何按值切换元素以及指向文档的链接。
# sample array
arr = ["a", "b", "c", "d", "e", "f", "g", "h"]
# suppose we want to move "h" element in position 7 to position 2 (trekd's answer)
arr = arr.insert(2, arr.delete_at(7))
=> ["a", "b", "h", "c", "d", "e", "f", "g"]
这是有效的,因为arr.delete_at(index)
删除了指定索引处的元素(在上面的示例中为' 7'),并返回该索引中的值。因此,运行arr.delete_at(7)
会产生:
# returns the deleted element
arr.delete_at(7)
=> "h"
# array without "h"
arr
=> ["a", "b", "c", "d", "e", "f", "g"]
将它放在一起,insert
方法现在可以放置这个" h"位置2处的元素。为了清楚起见,将其分为两个步骤:
# delete the element in position 7
element = arr.delete_at(7) # "h"
arr.insert(2, element)
=> ["a", "b", "h", "c", "d", "e", "f", "g"]
假设您想要将值为" h"的数组中的元素移动到位置2,无论其位置如何,这可以通过索引方法轻松完成:
arr = arr.insert(2, arr.delete_at( arr.index("h") ))
注意:以上假设只有一个值为" h"在阵列中。
答案 4 :(得分:2)
最好的方式..
array = [4, 5, 6, 7]
array[0], array[3] = array[3], array[0]
array # => [7, 5, 6, 4]
答案 5 :(得分:1)
此处的答案并未涵盖两种可能的情况。当问题处理的索引origin
高于destination
时,如果反之为真,则下面的解决方案将不起作用:
array.insert 7, array.delete_at(2)
这是因为删除2处的值会将数组中的所有内容(高于2处)向下移动1。现在我们的目标索引7指向的是索引8。
要解决此问题,我们需要检查origin
是否小于destination
,如果是,则从destination
中减去1。
origin = 2
destination = 7
destination -= 1 if origin < destination
array.insert destination, array.delete_at(origin)
答案 6 :(得分:0)
使用起来不是更好:
irb> a = [2,5,4,6]
#=> [2, 5, 4, 6]
irb> a.insert(1, a.pop)
#=> [2, 6, 5, 4]