我有一个数组。我需要将除元素之外的所有内容保留在索引0处。此时我的大脑已被炒掉了。我整天都在编程。任何帮助都会很棒。谢谢!
答案 0 :(得分:15)
使用Array#shift
方法,它完全符合您的要求:
a = [1, 2, 3]
a.shift # => 1
a # => [2, 3]
答案 1 :(得分:7)
你可以使用数组索引切片:
some_array[1..-1]
或者,如果要永久修改变量,请执行howsabout:
some_array = [1,2,3,4]
some_array.delete_at(0)
# => 1
some_array
# => [2,3,4]
答案 2 :(得分:1)
怎么样切片!
a = [“a”,“b”,“c”]
a.slice!(0)#=> “一”
a#=> [“b”,“c”]
http://www.ruby-doc.org/core-2.1.0/Array.html#method-i-slice-21
答案 3 :(得分: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& #39;)只是为了得到结果。
很高兴知道我们前往的方向往往会对如何到达目的地产生一定的影响。
(我注意到我几乎更喜欢使用slice!(0)
代替shift
来实际更改数组,因为感叹号清楚地表明数组正在被更改; shift
方法不符合当前的建议,即在改变对象的方法中添加惊叹号。但是,唉,我可能会使用shift
来避免杂乱的(0)
。)