Javascript Ruby-数组检查并替换为

Javascript Ruby-数组检查并替换为,javascript,ruby,arrays,loops,replace,Javascript,Ruby,Arrays,Loops,Replace,鉴于: 如果“句子”中包含数组“check_for”中的单词,如何检查整个字符串?如果找到这些单词,如何用“replace_with”中的单词替换 可将check_for中的单词替换为replace_with中具有相同索引的单词: [idx]的检查_应替换为[idx]的替换_ 我使用嵌套循环对Javascript做了一些“类似”的事情。出于某种原因,这不适用于Ruby 我使用嵌套循环的想法是将句子分割成数组,并将while循环与i和j一起使用。因此,句子[i]将从0开始: check_for =

鉴于:

如果“句子”中包含数组“check_for”中的单词,如何检查整个字符串?如果找到这些单词,如何用“replace_with”中的单词替换

可将check_for中的单词替换为replace_with中具有相同索引的单词:

[idx]的检查_应替换为[idx]的替换_

我使用嵌套循环对Javascript做了一些“类似”的事情。出于某种原因,这不适用于Ruby

我使用嵌套循环的想法是将句子分割成数组,并将while循环与i和j一起使用。因此,句子[i]将从0开始:

check_for = ["Lorem", "ipsum", "dolor", "sit", "amet"]

replace_with = ["Donec", "ut", "libero", "sed", "arcu"]

sentence = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur."
然后:

除了这个想法行不通之外,我确信Ruby中还有一种更直接的方法


不区分大小写是可以的。

这可以通过定义替换的哈希来完成:

sentence[i] = replace_with[j]
顺便说一句,您可以很容易地从数组中生成
replacements
hash,如下所示:

sentence = "Lorem ipsum dolor sit amet, consectetur adipiscing elit..."
replacements = {
  'Lorem' => 'Donec',
  'ipsum' => 'ut',
  'dolor' => 'libero',
  'sit'   => 'sed',
  'amet'  => 'arcu',
}

sentence.gsub(Regexp.union(replacements.keys), replacements)
#=> "Donec ut libero sed arcu, consectetur adipiscing elit..."

Cary Swoveland建议使用简化的Regexp:

replacements = Hash[check_for.zip(replace_with)]
我真的很喜欢,因为它读起来好多了

我想知道rexexp是否对性能有影响:一方面,构建一个复杂但专业的regexp。另一方面,使用一个简单的regexp,但必须根据哈希检查每个单词

sentence.gsub(/\w+/, replacements)

结果表明,较长的版本速度稍快。但我很确定,这可能会随着
句子的长度和要替换的元素的数量而变化。

这可以通过定义替换的哈希来完成:

sentence[i] = replace_with[j]
顺便说一句,您可以很容易地从数组中生成
replacements
hash,如下所示:

sentence = "Lorem ipsum dolor sit amet, consectetur adipiscing elit..."
replacements = {
  'Lorem' => 'Donec',
  'ipsum' => 'ut',
  'dolor' => 'libero',
  'sit'   => 'sed',
  'amet'  => 'arcu',
}

sentence.gsub(Regexp.union(replacements.keys), replacements)
#=> "Donec ut libero sed arcu, consectetur adipiscing elit..."

Cary Swoveland建议使用简化的Regexp:

replacements = Hash[check_for.zip(replace_with)]
我真的很喜欢,因为它读起来好多了

我想知道rexexp是否对性能有影响:一方面,构建一个复杂但专业的regexp。另一方面,使用一个简单的regexp,但必须根据哈希检查每个单词

sentence.gsub(/\w+/, replacements)

结果表明,较长的版本速度稍快。但我很确定,这可能会根据
句子的长度和要替换的元素的数量而变化。

这里有一种不使用替换哈希的方法,使用:

替换的_句子=[]
句子。分开。每个单词|
如果idx=检查索引(word.match(/\w+/)。到)

替换的句子这里有一种不使用替换哈希的方法,使用:

替换的_句子=[]
句子。分开。每个单词|
如果idx=检查索引(word.match(/\w+/)。到)

替换的句子你也可以写
句子.gsub(/\w+/,replacements)
,因为只有匹配哈希键的单词才会被替换。你也可以写
句子.gsub(/\w+/,replacements)
,因为只有匹配哈希键的单词才会被替换。我使用了斯派克曼的方法,但我真的很喜欢这个。尽管它仍然不同于我的嵌套循环想法,但这正是我的想法。我意识到我的解决方案没有考虑标点符号。我现在需要使用一个小正则表达式。我更新了我的答案。我采用了斯派克曼的方法,但我真的很喜欢这个。尽管它仍然不同于我的嵌套循环想法,但这正是我的想法。我意识到我的解决方案没有考虑标点符号。我现在需要使用一个小正则表达式。我已经更新了我的答案。