2

深くネストされたデータ構造を取得しました。

Seq[Seq[(String, Seq[(String, Seq[(String, Try[Boolean])])], Long)]]

Try.isFailure で groupBy を行う機能的な方法はありますか?

ここで見られるように、Shapeless を使用すると、任意のネストされたデータ構造を検索できます。しかし、見つけることは私の問題の一部にすぎません。私はジッパーとレンズを見ました、それらは素晴らしいですが、ここでは適切なツールではありません.

参考までに、データはいくつかのテスト コードの結果を表します。レイヤーは次のとおりです。構成の順列 => テストされたコンポーネント => データの変更 => コー​​ドのテスト。文字列は説明、long は各コンポーネントのテストが完了するまでにかかった時間です。私は 2 つのリストを作成したいと考えています。1 つはすべての失敗が発生したすべての情報を保持し、例外を情報として保持します。もう 1 つは成功に対応します。

すでに解決策はありますか?

注: その特定のケースに対する最も賢明なアプローチは、2 つのリスト、1 つの失敗リスト、1 つの成功リストが最初から作成されるようにテストコードを再設計することです。それでも、知りたいです。この種の問題は珍しいことではないようです。

4

1 に答える 1

2

これは最も独創的なソリューションではないかもしれませんが、partition次のように最も外側の Seqを使用できます。

val partitioned = seq.partition{ s =>
  val flat = s.map(_._2).flatten.map(_._2).flatten
  flat.find(tup => tup._2.isFailure).isDefined
}

この例では、partition本体の最初の行がネストされた構造を平坦化するため、最も内側のSeq. 次に、そこから、partition呼び出しに対して返される述語条件は、最も内側Seqに少なくとも 1 つのFailure. Seq残っているのは、最初の項目がネストされた構造に失敗した最も外側の項目であり、2 番目の項目が失敗が発生しなかった項目であるタプルです。

これはおそらく最高のパフォーマンスを発揮するソリューションではありませんが、コード行に関する限り簡潔です。実際、次のように 1 行で実行することもできます。

val partitioned = seq.partition(_.map(_._2).flatten.map(_._2).flatten.find(_._2.isFailure).isDefined) 
于 2013-04-23T14:44:53.217 に答える