如何动态地乘以代码文本?

时间:2013-04-11 00:48:38

标签: ruby loops

我的Ruby代码中有一段代码片段:

while words.size >= 3
  frequency["#{words[0]} #{words[1]} #{words[2]}"] += 1
  words.shift
end

我想设置一个变量i,并根据i的值,运行相应的代码。例如i=2

while words.size >= 2
        frequency["#{words[0]} #{words[1]}"] += 1
        words.shift
end

更改while条件中的值很简单,但如何根据变量i复制循环体?

1 个答案:

答案 0 :(得分:1)

您可以在循环中使用if..else语句轻松完成此操作:

while words.size > 0
  if words.size >= 3
    frequency["#{words[0]} #{words[1]} #{words[2]}"] += 1
  elsif words.size >=2
    frequency["#{words[0]} #{words[1]}"] += 1
  else
    break
  end
  words.shift
end

然而,这是Ruby,基于你如何创建这些键,它很容易说:

while words.size >= 2
   frequency[words.first(3).join(" ")] += 1
   words.shift
end

这将占用单词数组中的前三个元素,并将它们与空格连接,为您提供频率键。如果只剩下两个单词,它将同时使用它们。