我有一个数组。我需要保留除索引 0 处的元素之外的所有内容。此时我的大脑被炸了。我整天都在编程。任何帮助都会很棒。谢谢!
4 回答
使用该Array#shift
方法,它完全符合您的要求:
a = [1, 2, 3]
a.shift # => 1
a # => [2, 3]
您可以只使用数组索引切片:
some_array[1..-1]
或者,如果你想永久修改一个变量,howsabout:
some_array = [1,2,3,4]
some_array.delete_at(0)
# => 1
some_array
# => [2,3,4]
切片怎么样!
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
根据如何处理结果(删除第一个元素的数组),有不同的方法来获取结果以及如何使用它可能会影响选择。
一种方法是将原始数组更改为新数组,并通过应用方法删除第一个元素,忽略该方法的结果并由于应用方法的副作用而实现所需的结果。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)
。)