如何在数组中找到部分重复?

时间:2013-12-14 11:23:41

标签: ruby

我正在尝试从数组中删除部分重复值。

['John', 'Johnson', 'Mike', 'Tim', 'Timberland']

我想删除部分重复值。 在这种情况下,我希望保持更长的字符串值。

['Johnson', 'Mike', 'Timberland']

有什么好主意吗?

2 个答案:

答案 0 :(得分:3)

我会这样做:

ary = ['John', 'Johnson', 'Mike', 'Tim', 'Timberland']
ary.select {|e| ary.grep(Regexp.new(e)).size == 1 }
# => ["Johnson", "Mike", "Timberland"]

答案 1 :(得分:1)

如果部件仅位于单词的开头,请执行以下操作:

array = ['John', 'Johnson', 'Mike', 'Tim', 'Brakatim', 'Weltimwel']
# => ["John", "Johnson", "Mike", "Tim", "Brakatim", "Weltimwel"]

array.reject {| v | " #{array.join( ' ' )} " =~ /\W#{v}\w/i }
# => ["Johnson", "Mike", "Tim", "Brakatim", "Weltimwel"]

或者如果部分位于单词的开头,以及单词的结尾或中间:

array = ['John', 'Johnson', 'Mike', 'Tim', 'Timberland', 'Brakatim', 'Weltimwel']
# => ["John", "Johnson", "Mike", "Tim", "Timberland", "Brakatim", "Weltimwel"]

array.reject {| v | " #{array.join( ' ' )} " =~ /\W#{v}\w|\w#{v}\W|\w#{v}\w/i }
# => ["Johnson", "Mike", "Timberland", "Brakatim", "Weltimwel"]