我是Scala的新手,我正在尝试理解集合层次结构.我看到有"可变"和"一成不变"的集合之间的区别,但我不明白这是什么,其实就是在执行层面,以及如何这涉及到val和var.有人能给我一些见解吗?此外,每个集合类都有"可变"版本和"不可变"版本,还是有些类只能是"可变"或"不可变"?
在Java中,我LinkedHashMap用于此目的.Java的文档LinkedHashMap很清楚,它具有"可预测的迭代顺序",我在Scala中需要相同的东西.
Scala有ListMap和LinkedHashMap,但他们这样做究竟是什么文件很糟糕.
问题:Scala LinkedHashMap或ListMap实现是否用于此目的?如果没有,除了LinkedHashMap直接使用Java之外还有哪些其他选项?
在LINQ的scala并行集合中是否有任何等价物来withDegreeOfParallelism设置将运行查询的线程数?我想并行运行一个需要运行一定数量线程的操作.
我编写了一些 Scala 代码来对集合执行元素操作。在这里,我定义了两个执行相同任务的方法。一种方法使用zip,另一种使用zipped.
def ES (arr :Array[Double], arr1 :Array[Double]) :Array[Double] = arr.zip(arr1).map(x => x._1 + x._2)
def ES1(arr :Array[Double], arr1 :Array[Double]) :Array[Double] = (arr,arr1).zipped.map((x,y) => x + y)
Run Code Online (Sandbox Code Playgroud)
为了在速度方面比较这两种方法,我编写了以下代码:
def fun (arr : Array[Double] , arr1 : Array[Double] , f :(Array[Double],Array[Double]) => Array[Double] , itr : Int) ={
val t0 = System.nanoTime()
for (i <- 1 to itr) {
f(arr,arr1)
}
val t1 = System.nanoTime()
println("Total Time Consumed:" + ((t1 - t0).toDouble / 1000000000).toDouble + "Seconds") …Run Code Online (Sandbox Code Playgroud) performance scala scala-collections jmh elementwise-operations
看来toSeqScala集合中的方法返回一个scala.collection.Seq,我也可以返回一个Traversable或者Iterable需要将其转换为a scala.collection.immutable.Seq.
是否有捷径可寻?
谢谢理查德
我有一个Seq类的对象,如下所示:
class A (val key: Int, ...)
Run Code Online (Sandbox Code Playgroud)
现在我想将此转换Seq为a Map,使用key每个对象的值作为键,并将对象本身作为值.所以:
val seq: Seq[A] = ...
val map: Map[Int, A] = ... // How to convert seq to map?
Run Code Online (Sandbox Code Playgroud)
如何在Scala 2.8中高效且优雅地完成这项工作?
我有一个Map [String,Double]列表,我想将它们的内容合并到一个Map [String,Double]中.我该如何以惯用的方式做到这一点?我想我应该可以用折叠来做到这一点.就像是:
val newMap = Map[String, Double]() /: listOfMaps { (accumulator, m) => ... }
Run Code Online (Sandbox Code Playgroud)
此外,我想以通用的方式处理关键冲突.也就是说,如果我向已经存在的地图添加一个键,我应该能够指定一个返回Double的函数(在这种情况下)并获取该键的现有值,加上我试图添加的值.如果地图中尚不存在该关键字,则只需添加该关键字并使其值不变.
在我的具体情况下,我想构建一个Map [String,Double],这样如果地图已经包含一个键,那么Double将被添加到现有的地图值中.
我在我的特定代码中使用可变映射,但如果可能的话,我对更通用的解决方案感兴趣.
你如何按其值(在Int上)对scala.collection.Map [java.lang.String,Int]进行排序?什么是简短而优雅的方式呢?
你如何使用Map.foldLeft?根据文档,它看起来像
foldLeft [B] (z: B)(op: (B, (A, B)) ? B) : B
Run Code Online (Sandbox Code Playgroud)
但我遇到了困难:
Run Code Online (Sandbox Code Playgroud)Map("first"->1,"second"->2).foldLeft(0)((a,(k,v)) => a+v )错误:不是合法的形式参数
错误指向k前面的空心括号.
Scala MutableList和ListBuffer类之间有什么区别scala.collection.mutable?你什么时候使用一个与另一个?
我的用例是一个线性序列,我可以有效地删除第一个元素,prepend和append.什么是最好的结构?
scala ×10
scala-2.8 ×3
collections ×1
containers ×1
folding ×1
jmh ×1
map ×1
ordered-map ×1
performance ×1
sorting ×1