【发布时间】:2017-11-14 02:39:17
【问题描述】:
我正在使用来自this answer 的代码,但如果我想使用多个选项来表示您将在下面看到的“s”替换,它只能处理一个。如何使下面的代码更适合这样的替换:
subs = {'a'=>['@'],'i'=>['!'],'s'=>['$','&'] }
这是原始代码和替换。
string = "this is a test"
subs = {'a'=>'@','i'=>'!','s'=>'$'}
keys = subs.keys
combinations = 1.upto(subs.size).flat_map { |i| keys.combination(i).to_a }
combinations.each do |ary|
new_string = string.dup
ary.each { |c| new_string.gsub!(c,subs) }
puts new_string
end
【问题讨论】:
-
您的
subs不是有效的 Ruby 表达式。 -
耀应该把
subs = {'a'=>'@','i'=>'!', '*','s'=>'$', 's'=>'&'}写成subs = {'a'=>'@','i'=>'!', '*','s'=>['$','&'] }..这是有效的。 -
谢谢。我在上面进行了编辑,但它返回给我这样的项目: "th!["$", "&"] !["$", "&"] @ te["$", "&"]t"
-
不一致不好。您应该一直使用数组。
{'a' => ['@'], ...}. -
好的,谢谢。我也改变了上面的。如何获取代码以生成我现在想要的输出?它只是替换数组。
标签: ruby