2012-08-02 50 views
5

我有一個數組。我需要保留除索引0之外的所有元素。我的大腦在此刻被炸。我一直在編程。任何幫助將是驚人的。謝謝!Ruby刪除數組的第一個索引

+2

http://whathaveyoutried.com? – 2012-08-02 17:49:52

回答

14

使用Array#shift方法,它正是你想要的:

a = [1, 2, 3] 
a.shift # => 1 
a # => [2, 3] 
+0

我可以發誓我已經試過了。這似乎很容易。我一定是剛剛有一個錯字或什麼的。謝謝 – 2012-08-02 18:27:40

+4

爲了幫助你記住'shift'或'unshift'是否從數組中刪除項目的樂趣(低俗)助記符,請嘗試從名稱中刪除「f」。 :) – Phrogz 2012-08-02 21:36:44

+0

@Progrog:哈哈,喜歡它。 – maerics 2012-08-02 21:37:26

7

你可以只使用數組索引切片:

some_array[1..-1] 

,或者,如果你想永久改變一個變量,howsabout:

some_array = [1,2,3,4] 
some_array.delete_at(0) 
# => 1 
some_array 
# => [2,3,4] 
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 

除了需要修改原來的代碼結構(儘管也有優點和缺點,這取決於得到了些什麼),有必要創建一個新的臨時對象('臨時')只是爲了得到結果。

很高興知道我們往哪裏去往往會對如何到達那裏產生明確的影響。

(我會注意到,我幾乎喜歡使用的slice!(0)代替shift真正改變的陣列,因爲感嘆號清楚地表明該陣列被更改; shift方法不符合目前建議增加一個感嘆號的方法,將改變一個對象,但是,唉,我可能會使用shift總之,以避免混亂的(0)。)