2013-04-16 9 views
32

の一部である場合、私は、このような文字列を持ってチェック今はリスト内の値がString

val keys = List("hi","random","test") 

を、私は、文字列かどうかを確認したいakeysの値が含まれています。 Scalaの組み込みライブラリ関数を使用してこれをどのように行うことができますか?

(私がリストアップし、その後keysリストでチェックを行い、その後、解決策を見つけるためにaを分割する方法を知っている。しかし、私はもっと単純に、標準ライブラリ関数を使用して、それを解決する方法を探しています。)

答えて

51

このようなもの?

keys.exists(a.contains(_)) 

またはそれ以上の慣用的

+0

またはキーが存在するa.contains' – Eastsun

+2

OPの必要性に応じて、val keys = List("mess")は偽陽性である可能性があります。 keys.exists(a.split(' ').contains)はより正確かもしれません。 – nadavwr

+2

このソリューションは素晴らしいですが、私はそれを理解するのに苦労しています。あなたは私を助けてくれますか? – KirdApe

7
keys.exists(a.contains) 

単純なケースは、例えば、(rarryの回答で述べたように)閉じ込めをサブストリングテストすることです

keys.exists(a.contains(_)) 

あなたは、代わりに完全な単語マッチを実際に探したいかどうかを言っていません。 rarryの答えはあなたがしなかったと仮定しているので、ここではあなたのことを前提にしています。キーのリストが小さいリストに対してのみ有効であることを念頭に置いて

val a = "some random test message" 
val words = a.split(" ") 
val keys = Set("hi","random","test") // could be a List (see below) 
words.exists(keys contains _) 

ベア。リストの場合、containsメソッドは通常、リスト全体を直線的にスキャンして一致が見つかるか、最後に到達します。

項目数が多い場合は、セットが望ましいだけでなく、より正確な情報表現です。通常、セットはハッシュコードなどを介して最適化されているため、線形検索が必要ないか、まったく必要ありません。

+0

+1はセットの使用に重点を置いています! – Sibi

関連する問題