【问题标题】:How to select array elements in a given range in Ruby?如何在Ruby中选择给定范围内的数组元素?
【发布时间】:2011-04-01 07:41:38
【问题描述】:

我有一个包含 500 个元素的数组。我知道我可以通过 .first(100) 选择前 100 个,我的问题是如何选择从 100 到 200 的元素?

【问题讨论】:

标签: ruby arrays


【解决方案1】:

您可以在数组下标中使用范围:

arr[100..200]

【讨论】:

  • 您也可以使用负范围:对于 500 个元素的数组,arr[100..-50] 将获取第 100 个元素到第 450 个元素。
  • 请注意,在 ruby​​ 中,两个点 .. 的范围代表最后一个数字的 inclusive 范围,而三个点 ...exclusive。所以(1..4) 是 1,2,3,4 而(1...4) 是 1,2,3
  • arr[1..] 怎么样?这也对我从索引 1 到最后一个索引进行选择,但我不知道这是否正确。因为然后RuboCopRubyMine 上警告我。
【解决方案2】:

你可以这样做:

array[100..200] # returns the elements in range 100..200
# or
array[100,100] # returns 100 elements from position 100

More Information

【讨论】:

  • 有趣的答案,第二点使用两个不同的数字会更合适:array[100,200] # 从位置 100 返回 200 个元素
【解决方案3】:

dvcolgan 的回答是正确的,但听起来您可能正在尝试将数组分成 100 个组。如果是这种情况,有一个方便的内置方法:

nums = (1..500).to_a

nums.each_slice(100) do |slice|
  puts slice.size
end

# => 100, 100, 100, 100, 100

【讨论】:

    【解决方案4】:
    sample_array = (1..500).to_a
    elements_100_to_200 = sample_array[100..200]
    

    您可以将范围作为索引传递给数组,并从该子范围中获取包含查询元素的子数组。

    【讨论】:

      【解决方案5】:
      new_array = old_array.first(200) - old_array.first(100)
      

      【讨论】:

      • 这是有道理的:)。我想知道是否有这种方法
      • 那个创建了两个临时数组,然后做了一组差异......我认为不是空间和时间效率。
      • 你的权利。我在一个胜利盒子上,上面没有红宝石,所以我无法在 irb 中尝试其他解决方案。我也想过 array.find(100..200) 但我不知道它是否接受范围。试试看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      相关资源
      最近更新 更多