ブール関数を適用するために私がアクセスしているVector of Vectorがあります。すなわち、私はfはタイプT => Boolean
である f(myVector(i)(j))
の線に沿って何かを実行するつもりですScalaのネストされたSeqの範囲外にデフォルト設定する簡単な方法はありますか?
Vector[Vector[T]]
。
しかし、これは境界チェックをしません。私は本当にエレガントなものを手に入れることはできません。
私はapplyOrElse
を使用することができます。 f(defaultT)
はfalse
を返すでしょう。しかし、私は、私はだけではなく、機能のデフォルト値を設定することがしたいmyVector.applyOrElse(i, (_:Int) => Vector.empty).applyOrElse (j, (_:Int) => defaultT)
。
私は私にOption
を与えるためにリフトを使用することができますが、それが第2レベルでうまく構成されていません。 作業を行い、それでも読むことは本当に難しいですmyVector.lift(i) map (_.lift(j) map f getOrElse false) getOrElse false
。
そして標準の場合/他のブロックがあります:
if (myVector.size <= i) false
else {
val myVector2 = levelVector(i)
if (myVector2.size <= j) false
else f(myVector2(j))
}
それはちょうど私が達成できるものよりも簡単に分解することができなければならない何かのように思えます。 3層目を追加すると、それはさらに醜いものになります。
他にもオプションがありますか?
免責事項:これはコーセラのprogfunコースから構成されている
素晴らしい - 私はオプションを保持しようとしていたが、リストの理解の基本を忘れていた。ありがとう。 – Stephen
2.10短いバージョン: 'myVector.lift(i).flatMap(_。lift(j))。exists(f)' – lpandzic