【问题标题】:Inline array slicing内联数组切片
【发布时间】:2023-03-14 18:10:01
【问题描述】:

喂!我最近想知道一件有趣的事情。假设我有这个 sn-p:

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

在哪里

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

我真正想做的是迭代除最后一个之外的 ad hoc 数组的所有成员。 sn-p 显然不起作用,因为delete_at 返回已删除的元素。

有没有办法用“内联”语法对数组进行切片?还是我非常想念什么?你知道其他一些使类似方法链接更容易的技巧吗?

【问题讨论】:

    标签: ruby arrays range method-chaining slice


    【解决方案1】:

    只需将Array#[] 与范围一起使用:

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

    【讨论】:

    • 哦,我明白了...由于类似于 arnaud576875 提出的解决方案不起作用,我没有费心去考虑更多关于常规切片的问题。真丢人:(
    • 嗯,这与我的完全一样(我的作品也是如此),除了这个使用 0..-2(包含结尾)而不是 0...-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 ...
    

    【讨论】:

    • 这就是我首先想到的。但你可以亲眼看到它不起作用:P
    • 注意范围内的 3 ...;这意味着上限是独占的。
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 2014-08-09
    • 2021-11-16
    • 2021-09-04
    • 2010-12-21
    • 2012-02-23
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多