私はビューが軽量コレクションであり、それが怠惰だと理解します。ビューを軽量化するものを理解したいと思います。スカラコレクションのビュー
私は1000の乱数のリストがあります。私はこのリストの偶数を見つけ、最初の10の偶数だけを選びたいと思う。ここでのビューの使用は、中間のリストespを作成することを避けることができるので、私は最初の10の偶数だけを選択するので、より良いと信じています。当初は、フィルタメソッドで使用する関数は、メソッドforceが呼び出されるまで実行されないため、最適化が達成されたと考えましたが、これは正しくはありません。私はこのシナリオでビューをより良く使うことを理解するために苦労しています。それとも、私は間違った例を選んだのですか?
val r = scala.util.Random
val l:List[Int] = List.tabulate(1000)(x=>r.nextInt())
//without view, I'll get an intermediate list. The function x%2==0 will be on each elemenet of l
val l1 = l.filter(x=>(x%2 == 0))
//this will give size of l2. I got size as 508 but yours could be different depending on the random numbers generated in your case
l1.size
//pick 1st 10 even numbers
val l2 = l1.take(10)
//using view. I thought that x%2==0 will not be executed right now
val lv1 = l.view.filter(x=>(x%2 == 0))
lv1: scala.collection.SeqView[Int,List[Int]] = SeqViewF(...)
lv1.size //this is same as l1 size so my assumption that x%2==0 will not be executed is wrong else lv1.size will not be same as l1.size
val lv2 = lv1.take(10).force
**質問1 - 私がビューを使用する場合、どのように処理が最適化されますか?
質問2 - lv1はSeqViewF型ですが、Fはフィルタに関連していますが、それはどういう意味ですか?
質問3 - LV1の要素がどのように見えるか何(例えばL1が整数である)**
ありがとうございます。あなたの答えは良いですし、私は実生活のいくつかの例でビューを使用する方法を理解する助けになりました。私は、ビューを使用するときに関数が即座に実行されないという基本的な疑念を明確にしているので、他のコメントを「回答」としてマークしています。決して答えは、決して役に立たなかった –