私は2つのコレクションを持っています:a
はのScalaオブジェクトのシーケンスですclass C
。b
文字列のシーケンスです。の項目と一致する可能性C
のある文字列フィールド、があります。私が欲しいのは、ループして、のアイテムの1つに一致するものをすべて見つけることです。Scalaでこれを行うにはどうすればよいですか?name
b
a
c.name
b
質問する
218 次
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 に答える