JavaのIterable<T>
とC#IEnumerable<T>
に相当するScalaの実装方法は?基本的には、私のコレクションはマッピング可能でフィルタリング可能なものにしたいと思います。コレクションクラスを拡張する必要があり、列挙子を作成する簡単な方法(C#ではyield return
とyield break
など)Iterableの実装
8
A
答えて
13
Iterable
形質を実装します。必要なのは、iterator
メソッドだけです。その他の方法(map
、filter
など)は無料で利用できます。列挙子について
class MyIterable[T](xs: Vector[T]) extends Iterable[T] {
override def iterator = xs.iterator
}
val a = new MyIterable(Vector(1,2,3))
a.map(_+1) // res0: Iterable[Int] = List(2, 3, 4)
a.filter(_%2==1) // res1: Iterable[Int] = List(1, 3)
0
scala.collection.Iterable
特性またはその不変のバージョンはかなり包括的で強力です。助けてくれることを願っています。
0
、列挙型はScalaでありますが密封された特性+派生クラスを使用すると、例えば、より柔軟であるように思わ:
sealed trait MyEnum {
lazy val value = 0
}
case object MyEnumA extends MyEnum {
override lazy val value = 1
}
case object MyEnumB extends MyEnum {
override lazy val value = 2
}
scala> val a = MyEnumB
a: MyEnumB.type = MyEnumB
scala> a.value
res24: Int = 2
scala> val l = List(MyEnumA,MyEnumB)
l: List[Product with Serializable with MyEnum] = List(MyEnumA, MyEnumB)
scala> l.map(_.value)
res29: List[Int] = List(1, 2)
あなたにも任意の内部構造をなし、これらのオブジェクトを使用することができます文字列の表現以外の文字にマッピングしたくない場合は、
sealed trait MyEnum
case object MyEnumA extends MyEnum
case object MyEnumB extends MyEnum
scala> val a = MyEnumA
a: MyEnumA.type = MyEnumA
scala> a.toString
res21: String = MyEnumA
scala> val l = List(MyEnumA,MyEnumB)
l: List[Product with Serializable with MyEnum] = List(MyEnumA, MyEnumB)
scala> l.map(_.toString)
res30: List[String] = List(MyEnumA, MyEnumB)
関連する問題
- 1. JunitはIterableを実装します
- 2. マップラッパーでIterableを実装する方法
- 3. 具体的なマップの実装でIterable toMap
- 4. Iterableを実装する方法<E>
- 5. Iterableを実装したLinkedListでGenericを使用する
- 6. 単一項目でIterableインターフェイスを実装する
- 7. Iterableインターフェイスを実装するにはどうしたらいいですか?
- 8. iterable取得Tensor without evalを実行
- 9. Iterable <String> to Iterable <T>
- 10. 私は、オブジェクトがトレイト<code>Iterable</code>を実装し、実装方法に追加の暗黙のパラメータを渡したい追加の暗黙のパラメータ
- 11. ECoreのイテレータとIterable
- 12. zipWithIndexがIterableで実装されていて、Traversableでないのはなぜですか?
- 13. Scala Iterable Memory Leaks
- 14. RDD not iterable error
- 15. Scala:IterableをIterableのIterableに述語でグループ化する
- 16. リストのアレイベースの実装(カーソルの実装)
- 17. XMLドキュメントインターフェイスの実装とクラスの実装
- 18. Pythonループとiterableアイテム
- 19. IterableオブジェクトとDjango StreamingHttpResponse
- 20. Python OrderedDict iterable over int
- 21. Docker-compose '' NoneType 'is iterable' '
- 22. IteratorとIterableの違い
- 23. ダーツの非同期iterableマッピング
- 24. AccesingのIterableオブジェクトを直接
- 25. Iterable [A、B]のいずれかに[A、Iterable [B]]のいずれかを返す
- 26. Tomcat:java.security.Principalの実装
- 27. llvm.pow.f64の実装
- 28. ログウォッチャーの実装
- 29. パーシャルビューの実装
- 30. パーサーの実装
そのコードのパフォーマンス負担は?意味:O(n)時間かかりますか? –
@StefanKunze、*何がO(n)時間かかるのですか?もちろん、インデックスルックアップは線形になります。しかし、これは結局のところ、インデックス可能ではありません。 –
イテレータへの最初の変換? –