[解決済み] Scala: スライド(N,N) vs グループ化(N)
2022-02-10 01:51:52
質問
最近、コレクションを再処理することなくn個の要素で反復処理する必要があるときに、sliding(n,n)を使っていることに気づきました。私は、grouped(n)を使用してこれらのコレクションを反復する方がより正しいかどうか疑問に思っていました。私の質問は、パフォーマンスの観点から、この特定のケースでどちらかを使用する特別な理由があるかどうかです。
val listToGroup = List(1,2,3,4,5,6,7,8)
listToGroup: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)
listToGroup.sliding(3,3).toList
res0: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8))
listToGroup.grouped(3).toList
res1: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8))
解決方法は?
を使用する理由
sliding
ではなく
grouped
は、「ウィンドウ」を「スライド」させる長さとは異なる長さにしたい場合にのみ適用されます (つまり
sliding(m, n)
ここで
m != n
):
listToGroup.sliding(2,3).toList
//returns List(List(1, 2), List(4, 5), List(7, 8))
listToGroup.sliding(4,3).toList
//returns List(List(1, 2, 3, 4), List(4, 5, 6, 7), List(7, 8))
コメントでsom-snyttさんが指摘されているように、どちらも
Iterator
を返すように、新しい
GroupedIterator
. しかし、次のように書く方が簡単です。
grouped(n)
よりも
sliding(n, n)
を使用すると、コードがきれいになり、意図した動作がより明確になるので、お勧めします。
grouped(n)
.
を使用する例として
sliding
この問題を考えてみましょう。
grouped
では不十分なのです。
数字のリストがあるとき、長さ4のサブリストで和が最大となるものを求めよ。
さて、動的計画法の方が効率的に結果を出せるということは置いておいて、これは次のように解くことができる。
def maxLengthFourSublist(list: List[Int]): List[Int] = {
list.sliding(4,1).maxBy(_.sum)
}
もし、あなたが
grouped
では、すべてのサブリストを取得することはできませんので
sliding
がより適切です。
関連
-
[解決済み] Scalaでループから抜け出すにはどうしたらいいですか?
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] Scalaでファイル全体を読む?
-
[解決済み] Scalaのapply関数とは何ですか?
-
[解決済み】Scalaのリスト連結、::と++の比較
-
[解決済み】タスクがシリアライズされない:オブジェクトではなくクラスに対してのみクロージャの外で関数を呼び出すとjava.io.NotSerializableExceptionが発生する
-
[解決済み】Scala 2.8における<:<、<%<、=:=の意味と、それらのドキュメントはどこにあるのか?
-
[解決済み] Spark SQLでカラムの降順でソートするには?
-
[解決済み] Scalaの==と.equalsの違いは何ですか?
-
[解決済み】Scalaはどこでimplicitを探すのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Spark - アプリの投稿時に「設定にマスターURLが設定されている必要があります」というエラーが発生する
-
[解決済み] Sparkです。CoarseGrainedSchedulerが見つかりませんでした。
-
[解決済み] Scala forallの例?
-
[解決済み] NoClassDefFoundError: org/apache/hadoop/fs/StreamCapabilities (s3データをsparkで読み込む際に発生します。
-
[解決済み] TimeoutExceptionが発生した場合、どのような原因が考えられるでしょうか。Sparkで作業しているときに[n秒]後にFuturesがタイムアウトしました[重複]。
-
[解決済み] Spark - CSVファイルをDataFrameとして読み込む?
-
[解決済み】タスクがシリアライズされない:オブジェクトではなくクラスに対してのみクロージャの外で関数を呼び出すとjava.io.NotSerializableExceptionが発生する
-
[解決済み】Scalaでリスト内のアイテムを取得する?
-
[解決済み】Akka Kill vs. Stop vs. Poison Pill?
-
[解決済み] Scalaの==と.equalsの違いは何ですか?