Questions tagged «scala-collections»

Scala编程语言的集合库

18
Scala 2.8收藏库是否是“历史上最长的自杀记录”的案例?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 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在商业世界中成为坏名声,因为只有专注的博士生才能理解这种学术玩法?被CTO S和软件的负责人会得到吓跑了? 重新设计图书馆是明智的想法吗? 如果您正在商业上使用Scala,您是否对此感到担心?您打算立即采用2.8还是等待观察会发生什么? 史蒂夫·耶格 (Steve Yegge)曾经攻击Scala(在我看来是错误的),因为他认为Scala的字体系统过于复杂。我担心有人会在野外使用此API 散布FUD(类似于Josh Bloch害怕JCP不会在Java中添加闭包)。 注意 - 我应该清楚一点,尽管我相信约书亚·布洛赫(Joshua Bloch)在拒绝BGGA封闭提案方面具有影响力,但除了他诚实地认为该提案代表错误之外,我没有将这归因于其他任何事情。 尽管我的妻子和同事一直在告诉我什么,但我不认为我是个白痴:我在牛津大学获得了很好的数学学位,并且我从事商业编程已有近12年的时间,并且在Scala从事商业编程大约一年(也是商业上)。 请注意,煽动性的标题是对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?
似乎Vector对Scala收藏晚会来得太晚了,所有有影响力的博客文章都已经离开了。 在Java ArrayList中,默认集合是-我可能会使用,LinkedList但仅当我考虑了算法并足够谨慎地优化时才使用。在Scala中,我应该将其Vector用作默认值Seq,还是尝试找出List实际上更合适的时间?



13
Scala将Collection转换为Key-key的最佳方法?
如果我有一个集合c型的T,有一个属性p上T(的类型P,比方说),什么是做一个最好的办法地图通过提取键? val c: Collection[T] val m: Map[P, T] 一种方法如下: m = new HashMap[P, T] c foreach { t => m add (t.getP, t) } 但是现在我需要一张可变的地图。有没有更好的方法可以做到这一点,使它排成一行,而最终得到一个不变的 Map?(显然,可以像在Java中那样将上述内容转换为简单的库实用程序,但我怀疑在Scala中没有必要)


1
流vs视图vs迭代器
Scala中的Streams,Views(SeqView)和Iterators有什么区别?这是我的理解: 它们都是惰性列表。 流缓存值。 迭代器只能使用一次?您无法回到开始并再次评估值? 视图的值不会被缓存,但是您可以一次又一次地求值吗? 因此,如果我想节省堆空间,是否应该使用迭代器(如果我不再遍历列表)或视图?谢谢。

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来执行一些反转的value-> key查找。我一直在寻找一种简单的方法来做到这一点,但只想出了: (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库有点脏。我发现最“ scalaic”的方式是 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] = { …

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(返回a 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
参数:_ *在Scala中是什么意思?
作为Scala(2.9.1)的新手,我有个,List[Event]并且想要将其复制到Queue[Event],但是以下语法生成了a Queue[List[Event]]: val eventQueue = Queue(events) 由于某些原因,以下工作原理: val eventQueue = Queue(events : _*) 但是我想了解它的作用,以及为什么起作用?我已经看过Queue.apply函数的签名: def apply[A](elems: A*) 我知道为什么第一次尝试不起作用,但是第二次尝试是什么意思?什么是:,_*在这种情况下,为什么apply函数不只取一个Iterable[A]?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.