タグ付けされた質問 「scala-collections」

Scalaプログラミング言語のコレクションライブラリ

18
Scala 2.8コレクションライブラリは、「史上最長の自殺ノート」のケースですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 差し迫った2.8リリースで提供されるScalaコレクションライブラリの再実装を検討し始めたところです。2.7のライブラリに精通している人なら、ライブラリは使用法の観点からはほとんど変わっていないことに気付くでしょう。例えば... > List("Paris", "London").map(_.length) res0: List[Int] List(5, 6) ...どちらのバージョンでも機能します。ライブラリは非常に使いやすいです。実際、それは素晴らしいです。ただし、以前はScalaに慣れておらず、言語を理解するためにざっと見ていた人は、次のようなメソッドシグネチャを理解する必要があります。 def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That このような単純な機能の場合、これは困難なシグネチャであり、私が理解するのに苦労しているものです。Scalaが次のJava(または/ C / C ++ / C#)になる可能性が高いと私が思うわけではありません。その作成者がその市場を狙っていたとは思えませんが、Scalaが実現することは確かに実現可能でした次のRubyまたはPython(つまり、大幅な商用ユーザーベースを獲得するため) これは人々がScalaに来るのを先送りにするでしょうか? これは、専門の博士課程の学生だけが理解できる学術的な遊び道具として、Scalaを商業の世界で悪名にするのでしょうか?されCTO sおよびソフトウェアの頭はオフ怖がって取得するつもり? ライブラリの再設計は賢明なアイデアでしたか? Scalaを商業的に使用している場合、これについて心配していますか?すぐに2.8を採用する予定ですか、それとも何が起こるか確認するのを待ちますか? Steve Yeggeは かつてScalaを攻撃した(私の意見では誤解している)が、過度に複雑な型システムと見なしたものを攻撃した。私は誰かがこのAPIでFUDを広める実地の日を過ごすことを心配しています(Josh Bloch がJavaにクロージャーを追加することからJCPを怖がらせたのと同様に)。 注 - 私は私がいることを信じていながら、ことは明らかであるジョシュア・ブロックが、私は提案が間違いを表現することを彼の正直、信念以外にこれを帰ませんBGGA閉鎖案の拒否で影響を与えました。 私の妻や同僚が私に言い続けていることは何でも、私はばかだとは思わない:私はオックスフォード大学で数学の学位を取得しており、約12年間は商業的にプログラミングしており、Scalaで約1年(これも商用)。 扇情的な主題のタイトルは、1980年代初頭の英国の政党のマニフェストについてなされた引用であることに注意してください。この質問は主観的ですが、本当の質問です。CWにしました。この件についていくつかの意見をお願いします。

4
Scala 2.8ブレークアウト
Scala 2.8では、にオブジェクトがありますscala.collection.package.scala。 def breakOut[From, T, To](implicit b : CanBuildFrom[Nothing, T, To]) = new CanBuildFrom[From, T, To] { def apply(from: From) = b.apply() ; def apply() = b.apply() } これは次の結果になると言われています: > import scala.collection.breakOut > val map : Map[Int,String] = List("London", "Paris").map(x => (x.length, x))(breakOut) map: Map[Int,String] = Map(6 -> London, 5 …

6
ScalaでVectorを選択する必要があるのはいつですか?
VectorScalaコレクションパーティーに遅れたようで、影響力のあるすべてのブログ投稿はすでに残されていました。 Java ArrayListではデフォルトのコレクションです-私は使用するかもしれませんLinkedListが、アルゴリズムを熟考し、最適化するのに十分注意した場合のみです。Scala Vectorでは、デフォルトとしてを使用する必要がありますSeqか、それともList実際に適切な場合に解決する必要がありますか?



13
コレクションをキーごとに変換するScalaの最良の方法?
私がコレクションしている場合cのタイプのをTとプロパティがあるp上T(タイプのP、たとえば)、行うための最善の方法何であるマップ・バイ・抽出-keyは? val c: Collection[T] val m: Map[P, T] 1つの方法は次のとおりです。 m = new HashMap[P, T] c foreach { t => m add (t.getP, t) } しかし、今は変更可能なマップが必要です。これを1行にして、不変の Map を作成するためにこれを行うより良い方法はありますか?(明らかに、Javaの場合と同様に、上記を単純なライブラリユーティリティに変えることができますが、Scalaでは必要がないと思います)

3
Scalaでの配列とリストの違い
どのような場合にArray(Buffer)とList(Buffer)を使用する必要があります。私が知っている唯一の違いは、配列は不変で、リストは共変であるということです。しかし、パフォーマンスと他のいくつかの特性はどうですか?

1
ストリームvsビューvsイテレータ
Scalaのストリーム、ビュー(SeqView)、イテレータの違いは何ですか?これは私の理解です: それらはすべて遅延リストです。 ストリームは値をキャッシュします。 イテレータは一度しか使用できませんか?最初に戻って値を再度評価することはできませんか? ビューの値はキャッシュされませんが、何度でも評価できますか? それで、ヒープ領域を節約したい場合は、イテレータ(リストを再度トラバースしない場合)またはビューを使用する必要がありますか?ありがとう。

6
Scalaのリソースフォルダーからファイルを読み取る方法は?
以下のようなフォルダ構造があります。 - main -- java -- resources -- scalaresources --- commandFiles そしてそのフォルダーには、私が読まなければならないファイルがあります。これがコードです: def readData(runtype: String, snmphost: String, comstring: String, specificType: String): Unit = { val realOrInvFile = "/commandFiles/snmpcmds." +runtype.trim // these files are under commandFiles folder, which I have to read. try { if (specificType.equalsIgnoreCase("Cisco")) { val specificDeviceFile: String = …


10
Scalaでマップを反転させるエレガントな方法
現在、Scalaを学習しており、Mapを反転して値を逆にしてキーを検索する必要があります。私はこれを行う簡単な方法を探していましたが、思いついたのは次のものだけです。 (Map() ++ origMap.map(kvp=>(kvp._2->kvp._1))) 誰かがよりエレガントなアプローチを持っていますか?

3
Scalaでサブ配列を取得する正しい方法は何ですか?
私はscalaでサブアレイを取得しようとしていますが、それを行う適切な方法が何かについて少し混乱しています。私が最も欲しいのは、Pythonでそれを行う方法のようなものです: x = [3, 2, 1] x[0:2] しかし、私はあなたがこれを行うことができないとかなり確信しています。 それを行う最も明白な方法は、Java Arrays utilライブラリを使用することです。 import java.util.Arrays val start = Array(1, 2, 3) Arrays.copyOfRange(start, 0, 2) しかし、ScalaでJavaライブラリを使用することは、いつも少し汚れているように感じます。私がそれをするために見つけた最も「スケーラブルな」方法は def main(args: List[String]) { val start = Array(1, 2, 3) arrayCopy(start, 0, 2) } def arrayCopy[A](arr: Array[A], start: Int, end: Int)(implicit manifest: Manifest[A]): Array[A] = { val …

3
Scalaの不変セットがその型で共変ではないのはなぜですか?
編集:この質問を元の回答に基づいて書き直しました scala.collection.immutable.Setクラスは、その型パラメータの共変ではありません。どうしてこれなの? import scala.collection.immutable._ def foo(s: Set[CharSequence]): Unit = { println(s) } def bar(): Unit = { val s: Set[String] = Set("Hello", "World"); foo(s); //DOES NOT COMPILE, regardless of whether type is declared //explicitly in the val s declaration }

10
JavaコレクションをScalaコレクションに変換する
Stack Overflowの質問Scalaの新しいHashSet(Collection)に相当する質問に関連して、Javaコレクション(java.util.Listたとえば)をScalaコレクションに変換するにはどうすればよいListですか? 私は実際にはJava API呼び出しをSpring に変換しようとしてSimpleJdbcTemplateいます。これはを返すのでjava.util.List<T>、Scala不変に変換されますHashSet。だから例えば: val l: java.util.List[String] = javaApi.query( ... ) val s: HashSet[String] = //make a set from l これは動作するようです。批評は大歓迎です! import scala.collection.immutable.Set import scala.collection.jcl.Buffer val s: scala.collection.Set[String] = Set(Buffer(javaApi.query( ... ) ) : _ *)

3
param:_ *はScalaで何を意味しますか?
Scala(2.9.1)を初めて使用するので、を持っていて、List[Event]それをにコピーしたいのですQueue[Event]が、次の構文ではQueue[List[Event]]代わりに次のようになります。 val eventQueue = Queue(events) 何らかの理由で、次のように機能します。 val eventQueue = Queue(events : _*) しかし、私はそれが何をするのか、そしてなぜそれが機能するのかを理解したいと思いますか?私はすでにQueue.apply関数のシグネチャを見ました: def apply[A](elems: A*) そして、最初の試みがうまくいかない理由は理解していますが、2番目の試みの意味は何ですか?何です:と、_*このケースでは、なぜしないapply機能は、ちょうど取りますかIterable[A]?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.