2011-09-19 107 views
1

Hia!我最近想知道一件有趣的事情。說我有這樣的片段:在線陣列切片

params['path'].split('/').delete_at(-1).each do |dir| 
    # some work 

其中

params['path'] = 'lorem/ipsum/dir/file.ext' #for instance 

我真正想要做的是特設陣列的所有成員遍歷除了最後一個。該片段顯然不起作用,因爲delete_at返回已刪除的元素。

有沒有辦法用「內聯」語法切片數組?還是我非常想念一些東西?你知道一些其他的技巧讓類似的方法鏈更容易嗎?

回答

2

只需使用Array#[]射程:

params['path'].split('/')[0..-2].each 
+0

哦,我知道了...由於類似於arnaud576875提出的解決方案不起作用,我沒有更多地考慮定期切片。恥辱我:( – PJK

+0

好吧,這是完全一樣的我的(和我的作品),除了這一個使用0 ..- 2(包括端)而不是0 ...- 1(最終排他)。 – arnaud576875

2

使用Array[range]語法:

params['path'].split('/')[0...-1].each do |dir| 
    # ... 

0...-1從指數0意味着從獨家結束索引1

這與.slice(0...-1)相同。

請參閱該文檔here

嘗試在這裏:http://codepad.org/HyZ2GHxo


您可能需要使用File.dirname代替:

File.dirname(params['path']).split('/').each ... 
+0

這就是我首先想到了什麼,但是你可以看到你的自我,這是行不通的:P – PJK

+1

它適用於我:http://codepad.org/HyZ2GHxo – arnaud576875

+0

奇怪... http://codepad.org/fxOI73U7 – PJK