0

我有以下数组:

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 = ["Thursday morning", "Twitter users"]。

此外,如果那里有一个唯一的字符串(它不属于任何其他字符串,我也想保留它..)。

最好的方法是什么?

现在我有了这个,但它不起作用......

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 users”和“Thursday Morning”都出现在数组的其他字符串中。

因此,如果数组包含“绿球”之类的东西,我也需要提取它,因为它相对于数组中的其他字符串是唯一的。

希望现在更清楚,否则请告诉我。

EDIT2:我不希望任何人使用上面的代码来回答,我也会接受不同的代码或详细的伪代码..

4

1 回答 1

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"] 
于 2012-06-24T20:44:39.127 回答