コレクションを作成できません

jwvh

私が持っているStreamデータのを、私は最終以外の離れにすべてを投げたいn個の要素。入力に十分な要素がない場合、結果のストリームにはNoneが埋め込まれます。これは私が思いついたものです:

def lastN[T](in: Stream[T], len: Int): Stream[Option[T]] =
  in.foldLeft(Vector.fill[Option[T]](len)(None))(_.tail :+ Option(_)).to[Stream]

私が選んだVector、その内部のバッファ用tailおよびappend パフォーマンスの特性

これはすべて正常に機能します。おそらくもっと良い方法がありますか?[注:常により良い方法があります。]

しかしIterator、入力データのより適切な表現があると思いますか?問題ありません。の3つの言及をに置き換えるだけStreamIterator、すべて機能します。

さて、なぜどちらか/両方ではないのですか?

私はこのようなことができることを望んでいました:

import scala.language.higherKinds
def lastN[T, C[U] <: TraversableOnce[U] ](in: C[T], len: Int): C[Option[T]] =
  in.foldLeft(Vector.fill[Option[T]](len)(None))(_.tail :+ Option(_)).to[C] 

ああ、行かない。

エラー:Nothingタイプのコレクションに基づいて、Option [T]タイプの要素を使用してC [Option [T]]タイプのコレクションを作成できません。

私はCanBuildFrom直接ファッツを試しましたが、魔法の公式を思い付いていません。

コルマー

Queue内部バッファとして使用する方が自然だと思いますこれは、この種の処理により意味的に適してscala.collection.immutable.Queueおり、2つListので実装され、実際にはより効率的である可能性がありVectorます(もちろん、そうであるかどうかを確認するために測定を行う必要があります)。それ以外の場合、APIは完全に同じままです言及VectorQueue。に置き換えることができます

に関してはCanBuildFromtoメソッドを呼び出すためにコードで使用されます完全な署名参照して、何CanBuildFromを要求する必要があるかを確認できます

def to[Col[_]](implicit cbf: CanBuildFrom[Nothing, A, Col[A]]): Col[A] 

だから、あなたは必要になるでしょうCanBuildFrom[Nothing, Option[T], C[Option[T]]]

すべてをまとめると、可能な実装は次のようになります。

import scala.collection.generic.CanBuildFrom
import scala.collection.immutable.Queue

def lastN[T, C[U] <: TraversableOnce[U]](in: C[T], len: Int)(
  implicit cbf: CanBuildFrom[Nothing, Option[T], C[Option[T]]]
): C[Option[T]] =
  in.foldLeft(Queue.fill(len)(None: Option[T]))(_.tail :+ Option(_)).to[C]

あなたのコメントに関しては、コンパイラはそれを呼び出すtoために必要CanBuildFrom[Nothing, Option[T], C[Option[T]]]であることを知っていますが、抽象型を持つ暗黙の引数を自動的に見つけることはできません。

あなたが要求を入れた場合でもCanBuildFrom[Nothing, Option[T], C[Option[T]]]lastN署名あなたは、たとえば呼び出したときに、その後lastN(Vector(1,2,3), 2)、コンパイラはそれが知ってCいるVector、とTあるIntので、それは通過しなければなりませんCanBuildFrom[Nothing, Option[Int], Vector[Option[Int]]]

ここでは、すべての型が具体的であり、コンパイラCanBuildFromは通常の暗黙的なルックアップルール使用する関連インスタンスを見つけることができますVectorこの例のコンパニオンオブジェクトで1つ見つかると思います

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コレクションを作成できません

分類Dev

Solrクラウドでコレクションを作成できません

分類Dev

FacebookGraphObjectException:java.lang.stringからコレクションを作成できません

分類Dev

AnnotationException:コレクションをマップできません

分類Dev

Javaコレクションを決定できません

分類Dev

コレクションを検証できません

分類Dev

CosmosDBコレクションを縮小できません

分類Dev

マングースに新しいコレクションを作成させることができません

分類Dev

SharePoint 2010 の SharePoint 管理シェルを介してサイト コレクションを作成できません。

分類Dev

Automapper:コレクションの抽象型のインスタンスを作成できません

分類Dev

SwiftUI:ViewBuilderは配列に基づいてビューのコレクションを作成できません

分類Dev

Firebaseサブコレクションとロールの適切なルールを作成できません

分類Dev

Firebase-コレクションのコレクションをネストできません

分類Dev

SilverlightでコレクションをComboBoxにバインドできません

分類Dev

コレクションを削除できませんでした:[NHibernate.Exceptions.GenericADOException]

分類Dev

Laravel5.1はコレクションで@foreachを使用できません

分類Dev

xpathコレクションでWeb要素を取得できません(Workfusion)

分類Dev

mongodbコレクションでasqueryableを実行できません

分類Dev

コレクションを初期化できませんでした-FluentNhibernate

分類Dev

Git BashでMongoDBコレクションを取得できません(Windows)

分類Dev

Reactを使用してmongoコレクションを表示できません

分類Dev

newmanを使用してpostmanコレクションを実行できません

分類Dev

コレクションから値を取得できません(GetElementsByClassNameを使用)

分類Dev

NodeJS-.save()は関数ではありません。マングース経由でコレクションを作成できません

分類Dev

コレクションリストをソートできません

分類Dev

zip形式のbsonからコレクションを復元できません

分類Dev

mongoose / javascript:Mongodbのコレクションを更新できません

分類Dev

2つのEloquentコレクションをマージできません

分類Dev

mongodbのIDを持つコレクションに参加できません

Related 関連記事

  1. 1

    コレクションを作成できません

  2. 2

    Solrクラウドでコレクションを作成できません

  3. 3

    FacebookGraphObjectException:java.lang.stringからコレクションを作成できません

  4. 4

    AnnotationException:コレクションをマップできません

  5. 5

    Javaコレクションを決定できません

  6. 6

    コレクションを検証できません

  7. 7

    CosmosDBコレクションを縮小できません

  8. 8

    マングースに新しいコレクションを作成させることができません

  9. 9

    SharePoint 2010 の SharePoint 管理シェルを介してサイト コレクションを作成できません。

  10. 10

    Automapper:コレクションの抽象型のインスタンスを作成できません

  11. 11

    SwiftUI:ViewBuilderは配列に基づいてビューのコレクションを作成できません

  12. 12

    Firebaseサブコレクションとロールの適切なルールを作成できません

  13. 13

    Firebase-コレクションのコレクションをネストできません

  14. 14

    SilverlightでコレクションをComboBoxにバインドできません

  15. 15

    コレクションを削除できませんでした:[NHibernate.Exceptions.GenericADOException]

  16. 16

    Laravel5.1はコレクションで@foreachを使用できません

  17. 17

    xpathコレクションでWeb要素を取得できません(Workfusion)

  18. 18

    mongodbコレクションでasqueryableを実行できません

  19. 19

    コレクションを初期化できませんでした-FluentNhibernate

  20. 20

    Git BashでMongoDBコレクションを取得できません(Windows)

  21. 21

    Reactを使用してmongoコレクションを表示できません

  22. 22

    newmanを使用してpostmanコレクションを実行できません

  23. 23

    コレクションから値を取得できません(GetElementsByClassNameを使用)

  24. 24

    NodeJS-.save()は関数ではありません。マングース経由でコレクションを作成できません

  25. 25

    コレクションリストをソートできません

  26. 26

    zip形式のbsonからコレクションを復元できません

  27. 27

    mongoose / javascript:Mongodbのコレクションを更新できません

  28. 28

    2つのEloquentコレクションをマージできません

  29. 29

    mongodbのIDを持つコレクションに参加できません

ホットタグ

アーカイブ