2011-03-04 24 views
1

これは投稿するのが面白い質問だと思った。私には解決策があります。これを行うより良い方法があるのではないかと不思議です。Ruby:配列内の他の文字列の部分文字列である文字列を削除する

names = ["on", "question", "quest"] 

配列内の他のメンバーの部分文字列である文字列を削除したいとします。私が思い付くことができクリーンなコードされています。その結果、私は非常にルビーのように見えるしていません、そのコードを嫌い

["question"] 

ある

names.select do |name| 
    names.all? { |other_name| other_name == name || other_name.match(name).nil? } 
end 

。これを行うためのより良い/より効率的な/より簡潔な方法に関する提案はありますか?

ありがとうございました。

+0

'other_name == name ||'は必要ですか?それなしで少しきれいになるだろう。 –

+0

はい、そうでなければ、 "質問"を含むすべてが除外されます。 –

答えて

2

私は少し追加しました。インクルードを使う?文字列のメソッド

names.select do |name| 
    names.one? {|other_name| other_name.include? name} 
end 
+0

うん、わかりやすい、良い答え –

1

は思いませんこれを簡単

names.select do |name| 
     names.one? {|other_name| other_name.index(name)!=nil} 
end 

項目は、配列内のアイテムのいずれかの一部である場合はチェックします。

+0

うん、それは良いです。ヘルプをよろしくお願いいたします。 –

+1

'names.one?を使ってさらに短縮できますか? {| other_name | other_name [name]} ' –

+0

うん、それは正しい.. – RameshVel

関連する問題