【问题标题】:ruby array loop always pair红宝石数组循环总是配对
【发布时间】:2012-06-04 16:17:25
【问题描述】:

我有以下数组:

a = ['sda', 'sdb', 'sdc', 'sdd']

现在我想遍历这些条目,但总是包含两个元素。我现在这样做如下:

while b = a.shift(2)
  # b is now ['sda', 'sdb'] or ['sdc', 'sdd']
end

这感觉有点不对劲,有更好的方法吗?有没有办法轻松获得[['sda', 'sdb'], ['sdc', 'sdd']] 之类的东西?

我阅读了http://www.ruby-doc.org/core-1.9.3/Array.html,但没有找到有用的东西...

【问题讨论】:

  • +1 用于尝试阅读文档。

标签: arrays ruby loops


【解决方案1】:

您可能想查看Enumerable,它包含在Array 中。

你想要的方法是Enumerable#each_slice,它从可枚举的元素中重复产生给定的元素数量(如果最后没有那么多,则更少):

a = ['sda', 'sdb', 'sdc', 'sdd']
a.each_slice(2) do |b|
    p b
end

产量:

$ ruby slices.rb 
["sda", "sdb"]
["sdc", "sdd"]
$

【讨论】:

  • 好吧,不评论...我检查了Enumerator...
  • 是的,它们非常相似;请注意,Enumerator 实际上也包含 Enumerable;你可以把Enumerator 想象成一个通用接口来做枚举;如果你调用[1, 2, 3].each['sda', 'sdb', 'sdc', 'sdd'].each_slice(2)——都没有一个块——你会得到一个Enumerator 实例,然后你可以进一步做事情。
  • 点赞['sda', 'sdb', 'sdc', 'sdd'].each_slice(2).to_a
猜你喜欢
  • 2010-10-22
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 2023-04-10
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多