私はアイテムのセットを持っています。それらEffect
を呼び出しましょう。リストにはCause
、possibleEffects : Set[Effect]
効果のリストを繰り返し処理し、Cause
それぞれについて最初に見つけたものだけを返す必要がありますEffect
。複数の結果を引き起こす原因が重複している可能性があるため、結果をセットにする必要があります。これは何度も実行されるため、できるだけ高速にする必要があります。私は次のことを思いつきました(それが最善の方法であるかどうかはわかりません。私はscalaが初めてです)。
find()
を返すメソッドを使用しようとしていますOption[Cause]
。返されるものを除外する方法はありますNone
か (実際には発生しません。バグがない限り、リストには常に原因があります)、理解のために Some モナドから抽出する方法はありますか? 中では使えないようですmatches
。
val firstCauses : Set[Cause] = (for {
effect <- effects
possibleCause = allCauses.find(_.possibleEffects.contains(effect))
//todo: filter out possibleCause if it is not Some(Cause), and get it out of the Some monad so that the yield takes it
} yield possibleCause).toSet