web-dev-qa-db-ja.com

リストの値が文字列の一部であるかどうかを確認する

私はこのような文字列を持っています:

val a = "some random test message"

私はこのようなリストを持っています:

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

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

aをListに分割し、keys listでチェックして解決策を見つける方法を知っています。しかし、標準ライブラリ関数を使用してより簡単に解決する方法を探しています)

42
Sibi

このようなもの?

keys.exists(a.contains(_)) 

またはさらに慣用的に

keys.exists(a.contains)
72
rarry

単純なケースは、部分文字列の包含をテストすることです(rarryの答えで述べたように)。

keys.exists(a.contains(_)) 

代わりに、Word全体の一致を実際に検索するかどうかを言わなかった。 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 _)

キーのlistは小さなリストに対してのみ効率的であることに注意してください。リストでは、containsメソッドは通常、一致するものが見つかるか最後に達するまでリスト全体を線形にスキャンします。

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

9
Rick-777