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 toMap
- 3. 単一項目でIterableインターフェイスを実装する
- 4. Iterableを実装する方法<E>
- 5. Iterableインターフェイスを実装するにはどうしたらいいですか?
- 6. ECoreのイテレータとIterable
- 7. 私は、オブジェクトがトレイト<code>Iterable</code>を実装し、実装方法に追加の暗黙のパラメータを渡したい追加の暗黙のパラメータ
- 8. Scala Iterable Memory Leaks
- 9. Scala:IterableをIterableのIterableに述語でグループ化する
- 10. zipWithIndexがIterableで実装されていて、Traversableでないのはなぜですか?
- 11. IteratorとIterableの違い
- 12. リストのアレイベースの実装(カーソルの実装)
- 13. Iterable [A、B]のいずれかに[A、Iterable [B]]のいずれかを返す
- 14. XMLドキュメントインターフェイスの実装とクラスの実装
- 15. Iterableをソートする方法
- 16. ビジターカウンターの実装
- 17. プロダクトキーの実装
- 18. ハッシュコードの実装
- 19. セットの実装
- 20. safe_ptrの実装
- 21. BeanFactoryの実装
- 22. クイックソートの実装
- 23. インターフェイスの実装
- 24. サブリストの実装
- 25. カスタムリストビューの実装
- 26. WakefulIntentServiceの実装
- 27. ヒープタイプの実装
- 28. ブロッキングキューの実装
- 29. ショッピングカートの実装
- 30. スレッドプールの実装
そのコードのパフォーマンス負担は?意味:O(n)時間かかりますか? –
@StefanKunze、*何がO(n)時間かかるのですか?もちろん、インデックスルックアップは線形になります。しかし、これは結局のところ、インデックス可能ではありません。 –
イテレータへの最初の変換? –