假设我有一个数组
[0, 132, 432, 342, 234]
去掉第一个元素最简单的方法是什么?(0)
"弹出"数组的第一个元素被称为"转变" ("unshift" 是添加一个元素的操作
你可以使用:
a.slice!(0)
片!泛化到任何索引或范围。
在array上使用shift方法
shift
>> x = [4,5,6] => [4, 5, 6] >> x.shift => 4 >> x => [5, 6]
如果你想移除n个起始元素,你可以使用x.shift(n)
x.shift(n)
[0, 132, 432, 342, 234][1..] => [132, 432, 342, 234]
因此,与shift或slice不同的是,它返回一个新数组,保持原始数组不变(对一行很有用)。
slice
或a.delete_at 0
a.delete_at 0
这很简洁:
head, *tail = [1, 2, 3, 4, 5] #==> head = 1, tail = [2, 3, 4, 5]
正如评论中所写的,不改变原始列表的优点。
.drop(1)
这样做的好处是返回一个删除了第一个元素的新数组,而不是使用.shift,后者返回已删除的元素,而不是删除了第一个元素的数组。
.shift
注意:它不会影响/改变原始Array。
a = [0,1,2,3] a.drop(1) # => [1, 2, 3] a # => [0,1,2,3]
另外,你还可以删除第一个元素以外的元素:
[0,1,2,3].drop(2) => [2, 3] [0,1,2,3].drop(3) => [3]
你可以使用Array.delete_at(0)方法删除第一个元素。
x = [2,3,4,11,0] x.delete_at(0) unless x.empty? # [3,4,11,0]
使用shift法
array.shift(n) => Remove first n elements from array array.shift(1) => Remove first element
https://ruby-doc.org/core-2.2.0/Array.html#method-i-shift
arr - [arr[0]]
或
arr - [arr.shift]
或者简单地
arr.shift(1)
a.delete(a[0]) a.delete_at 0
两者都可以