1

私は2つのコレクションを持っています:aはのScalaオブジェクトのシーケンスですclass Cb文字列のシーケンスです。の項目と一致する可能性C のある文字列フィールド、があります。私が欲しいのは、ループして、のアイテムの1つに一致するものをすべて見つけることです。Scalaでこれを行うにはどうすればよいですか?namebac.nameb

4

2 に答える 2

4

aとbの両方を反復処理すると、1つのループが別のループ内にネストされるとO(n ^ 2)時間が発生するため、コストがかかる可能性があります。bが十分に大きい場合は、最初にそれをSetにして、これをO(n)にする必要があります。

val bSet = b.toSet;
a.filter(c => b.contains(c.name))

これを「aに次のフィルターを適用します。aの各項目cについて、cの名前がbにある場合にのみ、結果に含めます」と読みます。

于 2012-06-19T03:28:14.333 に答える
1

これは、yieldを使用したforループに相当します。

for(c <- a if b.contains(c.name)) yield c.name
于 2012-06-19T04:26:24.823 に答える