内联数组切片

时间:2011-09-19 18:00:52

标签: ruby arrays range method-chaining slice

Hia的!我最近想知道一件有趣的事情。说我有这个片段:

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

其中

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

我真正想做的是迭代ad hoc数组的所有成员,除了最后一个。该代码段显然不起作用,因为delete_at会返回已删除的元素。

有没有办法用“内联”语法切片数组?还是我非常想念一些东西?你知道其他一些技巧可以让类似的方法更容易链接吗?

2 个答案:

答案 0 :(得分:2)

只需使用Array#[]范围:

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

答案 1 :(得分: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 ...