我有以下数组:
str_ary = ["Thursday morning", "Twitter users", "Thursday morning , 140 characters",
"of Twitter users", "the virtual pockets of Twitter users","Beginning Thursday morning , 140 characters","in the virtual pockets of Twitter users"]
我想过滤它并获得str_ary2 = [“星期四早上”,“Twitter用户”]。
此外,如果那里有一个唯一的字符串(这不是任何其他字符串的一部分,我也想保留它...)。
最好的方法是什么?
现在我有了这个,但它不起作用......
def select_correct_sizes(arrays)
result = []
arrays.each do |a|
arrays.each do |b|
res = nil
if b != a
if a.split(' ').length >= b.split(' ').length
res = self.substract_and_check(a, b)
elsif a.split(' ').length < b.split(' ').length
res = self.substract_and_check(b, a)
end
if !res.nil?
result << res
end
end
end
end
result = result.uniq
return result
end
def substract_and_check(a, b)
res = a.gsub(/#{b}/, '')
res = res.split(' ')
if res.length + b.split(' ').length == a.split(' ').length
puts "#{b} IS PART OF THE #{a}"
return b
elsif text_uniq?(a,b)
puts "#{b} IS UNIQUE"
return b
else
return nil
end
end
def text_uniq?(a,b)
res = a.gsub(/#{b}/, '')
res = res.split(' ')
if res.length == a.split(' ').length
return true
else
return false
end
end
str_ary2 = select_correct_sizes(str_ary)
编辑:对不起,如果问题不是很清楚..
我需要提取字符串
A)1)存在于数组的其他字符串中 2)尺寸最小 B)1)唯一(例如,不存在于阵列的任何其他字符串中)。
所有字符串都是过滤后的短语,因此不会出现像“the”,“one”等随机个别垃圾词。
在上面的示例中,“Twitter用户”和“星期四早上”都出现在阵列的其他字符串中。
因此,如果数组包含类似“green ball”的内容,我也需要提取它,因为它相对于数组中的其他字符串是唯一的。
希望现在更清楚,请让我知道。
EDIT2:我不希望有人使用上面的代码进行回答,我会接受不同的代码或详细的伪代码..
答案 0 :(得分:2)
如果我正确理解了这个问题,你想要所有不包含任何其他元素的元素。
str_ary = ["Thursday morning", "Twitter users", "Thursday morning , 140 characters",
"of Twitter users", "the virtual pockets of Twitter users",
"Beginning Thursday morning , 140 characters","in the virtual pockets of Twitter users",
'green ball']
str_ary.reject{|e| (str_ary - [e]).any?{|e1| e.include?(e1)}}
# => ["Thursday morning", "Twitter users", "green ball"]