我该怎么做?我试过做这个gsub,但我不知道如果strings-to-u highlight数组很大,那么它的效率有多高。干杯!

  string = "Roses are red, violets are blue"

  strings_to_highlight = ['red', 'blue']

  # ALGORITHM HERE

  resulting_string = "Roses are (red), violets are (blue)"

最佳答案

我建议使用String#gsub的形式,使用散列进行替换。

strings_to_highlight = ['red', 'blue']

首先构造散列。
h = strings_to_highlight.each_with_object({}) do |s,h|
  h[s] = "(#{s})"
  ss = "#{s[0].swapcase}#{s[1..-1]}"
  h[ss] = "(#{ss})"
end
  #=> {"red"=>"(red)", "Red"=>"(Red)", "Blue"=>"(Blue)", "blue"=>"(blue)"}

接下来为它定义一个默认过程:
h.default_proc = ->(h,k) { k }

因此,如果h没有键,则k返回h[k](例如k)。
准备出发!
string = "Roses are Red, violets are blue"

string.gsub(/[[[:alpha:]]]+/, h)
 => "Roses are (Red), violets are (blue)"

这应该是相对有效的,因为只需要一次遍历字符串,并且散列查找非常快。

关于ruby-on-rails - 如何基于Ruby中数组中的单词替换字符串中的单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40137481/

10-12 17:26