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 = ["木曜日の朝", "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 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 に答える