6

我有一个数组。我需要保留除索引 0 处的元素之外的所有内容。此时我的大脑被炸了。我整天都在编程。任何帮助都会很棒。谢谢!

4

4 回答 4

15

使用该Array#shift方法,它完全符合您的要求:

a = [1, 2, 3]
a.shift # => 1
a # => [2, 3]
于 2012-08-02T17:50:07.897 回答
8

您可以只使用数组索引切片:

some_array[1..-1]

或者,如果你想永久修改一个变量,howsabout:

some_array = [1,2,3,4]
some_array.delete_at(0)
# => 1
some_array
# => [2,3,4]
于 2012-08-02T17:49:45.697 回答
1

切片怎么样!

a = [“a”,“b”,“c”]

a.slice!(0) #=> "a"

a #=> ["b", "c"]

http://www.ruby-doc.org/core-2.1.0/Array.html#method-i-slice-21

于 2014-01-08T04:19:19.723 回答
1

根据如何处理结果(删除第一个元素的数组),有不同的方法来获取结果以及如何使用它可能会影响选择。

一种方法是将原始数组更改为新数组,并通过应用方法删除第一个元素,忽略该方法的结果并由于应用方法的副作用而实现所需的结果。OP 接受了这样做的答案(这意味着它在他的情况下有效):

a = [ "a", "b", "c" ]
a.shift #=> "a"
a #=> ["b", "c"]

如果您希望保留结果数组,这很有效,但您需要将一些方法放入现有方法链的中间,以便“摆脱第一个数组元素”。但是,在我的情况下,我有一个数组,其中第一个元素是由系统命令生成的标题行,然后是该命令的几行输出,每个数组元素中都有一个,并且正在修改这些行以达到我想要的结果意识到需要删除标题行,因为与其余行的形式不同,它没有被正确处理并且不需要。我的原始代码行看起来像这样(又a是数组):

puts a.method1.method2.method3.method4

我想这样做:

puts a.method1.method2.removeFirstElement.method3.method4

一种通过使用来做到这一点的方法slice显示在一个不同的答案中,尽管不清楚在某些情况下它如何比接受的答案更好:

puts a.method1.method2.slice(1..-1).method3.method4

如果我使用接受的答案,我将不得不做这样的事情:

temp = a.method1.method2
temp.shift
puts temp.method3.method4

除了需要修改原始代码结构(尽管根据正在做的事情有利有弊),有必要创建一个新的临时对象('temp')来获得结果。

很高兴知道我们前进的方向通常会对如何到达那里产生明确的影响。

(我会注意到,我几乎更喜欢使用slice!(0)in 代替shift来实际更改数组,因为感叹号清楚地表明数组正在被更改;该shift方法不符合当前添加感叹号的建议到会改变对象的方法。但是,唉,我可能还是会使用它shift来避免混乱的(0)。)

于 2014-12-25T10:57:50.880 回答