2011-09-19 73 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