提取字符串,它是数组中其他字符串的最小部分,或者是唯一的

时间:2012-06-24 19:59:02

标签: ruby arrays string

我有以下数组:

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:我不希望有人使用上面的代码进行回答,我会接受不同的代码或详细的伪代码..

1 个答案:

答案 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"]