我该怎么做?我试过做这个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/