【问题标题】:Cleanest way to do something like "Sentences.each.each" in Ruby在 Ruby 中执行诸如“Sentences.each.each”之类的最干净的方法
【发布时间】:2011-11-22 16:02:28
【问题描述】:

假设我有一个句子数组:

a = ["I love pie", "I love you more and more each day", "every day is a good day"]

我想测试句子中的每个单词。因为 ruby​​ 太棒了,所以我认为 a.each.each 可能会起作用,但事实并非如此。有没有一种干净的方法,而不必将每个嵌套在每个内部?

【问题讨论】:

  • 值得注意的是没有String#each,所以“I love pie”.each 是NoMethodError。你需要"I love pie".split.each,即使没有包装数组。

标签: ruby loops coding-style each


【解决方案1】:
a.each { |sentence| sentence.split.each { |word| # do something with the word } }

或稍长的格式,如果:

a.each do |sentence|
  sentence.split.each do |word|
    # do something
    # do something
    # do something
  end
end

【讨论】:

  • 好吧,如果您需要一个衬里,第一个可以工作。但是如果你需要对每个 word 做一堆事情,那么你可能想要使用多行 do...end 块来代替。
【解决方案2】:

如果你想避免嵌套(至少在视觉上),你可以使用:

a.map(&:split).flatten.each{ |word| # do something }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2011-01-30
    • 2013-03-11
    • 2017-01-08
    • 2012-02-15
    相关资源
    最近更新 更多