合并两个字符串,同时使用Ruby删除重复的值

时间:2014-03-18 13:42:06

标签: ruby-on-rails ruby string merge

我想要合并两个字符串:

str_1 = "A5 Coupé (B8)"
str_2 = "A5 Coupé 2,0 T FSI"

这当然可以通过调用

来完成
str_1 + str_2

但是我想要一个包含' A5 Coupe'只有一次:

"A5 Coupé 2,0 T FSI (B8)"

如何实现?

2 个答案:

答案 0 :(得分:1)

您可以使用空格作为分隔符拆分字符串,然后将唯一结果连接在一起。为了满足您的示例,str_2需要先来。

[str_2, str_1].map {|str| str.split(' ') }.flatten.uniq.join(' ')

答案 1 :(得分:1)

您可以使用|运算符来获取两个字符串中存在的单个单词的并集:

str_1 = "A5 Coupé (B8)"
str_2 = "A5 Coupé 2,0 T FSI"

puts ( str_2.split | str_1.split ).join(' ')
# => "A5 Coupé 2,0 T FSI (B8)"

对于任意数量的字符串,您可以这样做:

strings = [
  "A5 Coupé (B8)",
  "A5 Coupé 2,0 T FSI",
  "A5 Coupé 2,0 Special Edition",
  "A5 Coupé 2,0 Mini",
  "A5 Coupé (B8)",
  "A5 Coupé"
]

puts strings.reduce([]) { |words, str| words | str.split }.join(' ')
# => "A5 Coupé (B8) 2,0 T FSI Special Edition Mini"

.reduce函数迭代数组,构建一个以空数组[]开头的结果值。对于str中的每个字符串strings,它将通过当前值与每个str的单个单词的并集替换当前构建的值(这是一个单词数组)(所以基本上,在数组中添加尚未出现的单词。)