那么为什么List(1,2,3,4).contains("wtf")甚至编译?如果编译器拒绝这个会不会很好?
当我for在Scala中评估一个时,我得到一个不可变的IndexedSeq(一个具有类似数组的性能特征的集合,例如高效的随机访问):
scala> val s = for (i <- 0 to 9) yield math.random + i
s: scala.collection.immutable.IndexedSeq[Double] = Vector(0.6127056766832756, 1.7137598183155291, ...
Run Code Online (Sandbox Code Playgroud)
是for一个yield总是返回一个IndexedSeq,还是它还可以返回一些其他类型的集合类(LinearSeq例如,a)?如果它还可以返回其他内容,那么什么决定了返回类型,我该如何影响它呢?
我正在使用Scala 2.8.0.RC3.
我已经在Scala中尝试了不同的集合来对它的元素进行求和,它们比Java和它的数组(for循环)慢得多.Scala有没有像Java数组一样快的方法?
我听说scala 2.8中的数组与java相同,但实际上它们要慢得多
我正在使用库(JXPath)来查询bean的图形以便提取匹配的元素.但是,JXPath返回匹配元素组作为java.lang.Iterator的实例,我更愿意将其转换为不可变的scala列表.有没有比在迭代器上迭代并在每个迭代步骤创建一个新的不可变列表更简单的方法?
我想链接2列唯一标识符,并能够通过第二列值获得第一列值,并通过第一列值获得第二列值.就像是
Map(1 <-> "one", 2 <-> "two", 3 <-> "three")
Run Code Online (Sandbox Code Playgroud)
Scala有这样的设施吗?
实际上我还需要更多:3列在三元组中选择三元组中的任何一条(在整个地图中永远不会遇到单个值).但是2列双向映射也可以提供帮助.
collections scala map bidirectional-relation scala-collections
我正在使用Java代码中的一些Scala库.我的收藏有问题.我需要传递scala.collection.immutable.Map作为方法的参数.我可以immutable.Map从我的Java代码转换或构建,但我不知道如何做到这一点.建议?
有没有理由为什么Scala中没有隐式的列表排序?
val lists = List(List(2, 3, 1), List(2, 1, 3))
lists.sorted
error: could not find implicit value for parameter ord: Ordering[List[Int]]
Run Code Online (Sandbox Code Playgroud)
编辑
是的,我的问题是为什么没有内置订购已隐含在范围内.对我来说,似乎显而易见的是,第二个列表应该"小于"第一个列表,因为0处的项目相等而第二个列表的较低项目为1.我想知道是否可能是因为没有好的答案列表有两种不同的尺寸.
我写了第一个Project Euler问题的答案:
添加1000以下的所有自然数,即3或5的倍数.
我遇到的第一件事是:
(1 until 1000).filter(i => (i % 3 == 0 || i % 5 == 0)).foldLeft(0)(_ + _)
Run Code Online (Sandbox Code Playgroud)
但它很慢(需要125毫秒),所以我重写了它,只是想到'另一种方式'而不是'更快的方式'
(1 until 1000).foldLeft(0){
(total, x) =>
x match {
case i if (i % 3 == 0 || i % 5 ==0) => i + total // Add
case _ => total //skip
}
}
Run Code Online (Sandbox Code Playgroud)
这要快得多(只有2毫秒).为什么?我猜第二个版本只使用Range生成器,并没有以任何方式显示完全实现的集合,一次完成所有这一切,更快,内存更少.我对吗?
这里是IdeOne上的代码:http://ideone.com/GbKlP
scala.collection.Map从其他馆藏构建,我经常发现自己写作:
val map = Map(foo.map(x=>(x, f(x)))
Run Code Online (Sandbox Code Playgroud)
但是,由于Map.apply只接受变量参数,因此这不起作用- 所以我必须写:
val map = Map(foo.map(x=>(x, f(x)) toSeq :_*)
Run Code Online (Sandbox Code Playgroud)
得到我想要的东西,但这看起来很痛苦.有没有比Map从Iterable元组构造一个更漂亮的方法?
对于Scala List [Int],我可以调用max方法来查找最大元素值.
如何找到最大元素的索引?
这就是我现在正在做的事情:
val max = list.max
val index = list.indexOf(max)
Run Code Online (Sandbox Code Playgroud) scala ×10
collections ×1
indexing ×1
java ×1
jxpath ×1
map ×1
max ×1
performance ×1
scala-2.8 ×1