【问题标题】:select method equivalent to retain indices only in Ruby选择方法等效于仅在 Ruby 中保留索引
【发布时间】:2015-09-28 04:41:18
【问题描述】:

假设我在 Ruby 中有这个数组:

a=[1,2,3]

我只想要大于 2 的元素的索引,而不是元素本身。是否有一个 Array 方法可以等效于:

d=[]
a.each_with_index{ |x, i| d.push(i) if x > 2 }

类似:

a.select_index{ | x | x > 2 }

谢谢。

【问题讨论】:

  • 数组索引是工件,在 Ruby 编程中,通常不需要像这样直接引用它们。这就是没有单一方法可以做到这一点的原因。我觉得你在做的事情有一种代码味道。
  • 它用于快速参考/索引,基于元数据。我正在处理大量数据,这是针对不需要 JRuby 的“热门部分”。有意义吗?

标签: arrays ruby methods


【解决方案1】:

你可以这样做:

a = [1,2,3]
a.each_index.select { |i| a[i] > 2 }
# => [2]

【讨论】:

    【解决方案2】:
    > a = [1, 2,3]
    => [1, 2, 3]
    > a.map { |n| a.index(n) if n > 2 }.compact
    => [2]
    

    【讨论】:

      【解决方案3】:

      不像 Arup 和 Elle 的答案那么短,但以下仅引用一次 a

      a.to_enum.with_index.select{|x, _| x > 2}.map(&:last)
      # => [2]
      

      【讨论】:

        猜你喜欢
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        • 1970-01-01
        • 2015-09-08
        • 1970-01-01
        相关资源
        最近更新 更多