标签: scala-collections

为什么Scala列表没有订购?

有没有理由为什么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.我想知道是否可能是因为没有好的答案列表有两种不同的尺寸.

scala scala-collections

21
推荐指数
2
解决办法
7423
查看次数

Scala集合中是否提供循环/循环队列

Scala集合中是否提供循环队列?

我需要重复迭代一个循环自己的列表

val x = new CircularList(1,2,3,4)
x.next (returns 1)
x.next (returns 2)
x.next (returns 3)
x.next (returns 4)
x.next (returns 1)
x.next (returns 2)
x.next (returns 3)
Run Code Online (Sandbox Code Playgroud)

... 等等

scala scala-collections scala-2.10

21
推荐指数
2
解决办法
5266
查看次数

过滤器的Scala集合类型

假设你有一个List(1,"1")它是类型List [Any],这当然是正确的和预期的.现在,如果我像这样映射列表

scala> List(1, "1") map {
     |   case x: Int => x
     |   case y: String => y.toInt
     | }
Run Code Online (Sandbox Code Playgroud)

结果类型是List [Int],也是预期的.我的问题是,是否存在等效于过滤器的映射,因为以下示例将导致List [Any].这可能吗?我假设这可以在编译时解决,可能不是运行时?

scala> List(1, "1") filter {
     |   case x: Int => true
     |   case _ => false
     | }
Run Code Online (Sandbox Code Playgroud)

types scala scala-2.8 scala-collections

20
推荐指数
2
解决办法
3618
查看次数

在Scala 2.8集合中,为什么Traversable类型添加到Iterable之上?

我知道Traversable,你需要一个foreach方法.Iterable需要一种iterator方法.

Scala 2.8集合SID和"与类型战斗的Bitrot"论文基本上都没有提到为什么Traversable被添加.SID只说"David McIver ......将Traversable提议为Iterable的概括".

我从IRC的讨论中模糊地收集到,当收集的遍历终止时,它与回收资源有关吗?

以下内容可能与我的问题有关.有一些奇怪的函数定义TraversableLike.scala,例如:

def isEmpty: Boolean = {
  var result = true
  breakable {
    for (x <- this) {
      result = false
      break
    }
  }
  result
}
Run Code Online (Sandbox Code Playgroud)

我认为有一个很好的理由不仅仅是作为:

def isEmpty: Boolean = {
  for (x <- this)
    return false
  true
}
Run Code Online (Sandbox Code Playgroud)

scala scala-2.8 scala-collections

20
推荐指数
2
解决办法
2177
查看次数

在Scala中用于存储内存中可变数据表的类型是什么?

每次调用一个函数时,如果给定的一组参数值的结果尚未被记忆,我想将结果放入内存表中.一列用于存储结果,另一列用于存储参数值.

我该如何最好地实现这一点?争论的种类繁多,包括一些枚举.

在C#中,我通常使用DataTable.Scala中有同等的东西吗?

scala memoization data-structures scala-collections

20
推荐指数
2
解决办法
9113
查看次数

Scala的可变Map更新[map(key)= newValue]语法如何工作?

我正在通过Cay Horstmann的Scala for the Impatient book,我遇到了这种更新可变地图的方式.

scala> val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
scores: scala.collection.mutable.Map[String,Int] = Map(Bob -> 3, Alice -> 10, Cindy -> 8)

scala> scores("Alice") // retrieve the value of type Int
res2: Int = 10

scala> scores("Alice") = 5 // Update the Alice value to 5

scala> scores("Alice")
res4: Int = 5
Run Code Online (Sandbox Code Playgroud)

它看起来像scores("Alice")命中applyMapLike.scala.但这只返回值,而不是可以更新的值.

出于好奇,我在不可变的地图上尝试了相同的语法,并出现以下错误,

scala> val immutableScores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" …
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

20
推荐指数
1
解决办法
2万
查看次数

如何从Scala中的Set获取随机元素

例如,对于任何给定的集合,

val fruits = Set("apple", "grape", "pear", "banana")
Run Code Online (Sandbox Code Playgroud)

如何从中获取随机元素fruits

非常感谢.

random collections scala set scala-collections

20
推荐指数
2
解决办法
1万
查看次数

为什么这是在Java 7下编译而不是在Java 8下编译?

这似乎可以使用Java 7和任何版本的Scala库进行编译:

public static void main(String[] args) {
    scala.collection.immutable.Set<String> set = new scala.collection.immutable.HashSet<String>();
    Iterator<String> iterator = set.iterator();
}
Run Code Online (Sandbox Code Playgroud)

它还可以编译Java 8和Scala 2.11.5+.但是使用Java 8和Scala 2.11.4,Eclipse抱怨:

The method iterator() is ambiguous for the type Set<String>
Run Code Online (Sandbox Code Playgroud)

我不明白这一点.您可能会对在某些上下文中选择哪个重载方法感到不明确,但如果您没有传递任何参数,肯定不会?

真奇怪的是,如果我像这样重铸:

public static void main(String[] args) {
    Iterator<String> iterator = new scala.collection.immutable.HashSet<String>().iterator();
}
Run Code Online (Sandbox Code Playgroud)

投诉消失了.在我看来,这与上面的版本完全相同.那为什么它现在编译好了?

java scala compiler-errors scala-collections java-8

20
推荐指数
2
解决办法
2600
查看次数

SCALA:使用".contains()"或".exists()"时哪种情况下哪种数据结构是最佳的?

我想知道在哪些情况下哪些数据结构最适合使用"包含"或"存在"检查.

我问,因为我来自Python背景,并习惯于使用if x in something:表达式.例如,哪些表达式评估最快:

val m = Map(1 -> 1, 2 -> 2, 3 -> 3, 4 -> 4)
                                          //> m  : scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3, 4
                                          //|  -> 4)
val l = List(1,2,3,4)                     //> l  : List[Int] = List(1, 2, 3, 4)
val v = Vector(1,2,3,4)                   //> v  : scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4)

m.exists(_._1 == 3)                       //> res0: Boolean = true
m.contains(3)                             //> res1: Boolean = true …
Run Code Online (Sandbox Code Playgroud)

performance scala data-structures scala-collections

19
推荐指数
1
解决办法
3600
查看次数

将Java TreeMap代码迁移到Scala?

我正在将我的Java代码库迁移到纯Scala,我仍然坚持使用这一段代码.我有一个让我们的IntervalMap即数据结构的实现你有效地映射范围[from,to]values了哪里set,deleteget操作都O(log n)(从IntervalTree或线段树略有不同).

这段代码使用Java java.util.TreeMaps,在迁移到Scala时,我遇到了两个大问题:

  1. Scala没有mutable.TreeMap- 我决定通过使用mutable.TreeSet(奇怪的是Scala mutable.TreeSet但没有mutable.TreeMap)来存储密钥并将值存储在辅助中mutable.Map.这是一个不愉快的黑客,但还有更好的方法吗?

  2. 接下来的问题是Scala的mutable.TreeSet没有类似的java.util.TreeSetceilingKey,floorEntry,pollFirst,pollLast这些都是O(log n)在Java操作.

那么,我怎样才能最好地将我的代码迁移到Scala?这些情况下的最佳做法是什么?我真的不想编写自己的树实现.有没有更惯用的Scala编写IntervalMaps的方式,我不知道?或者那里有一些有信誉的图书馆?或者Scala只是简单地用它的gimped TreeSet和不存在的TreeMaps来吸吮.当然,我可以TreeMap在Scala中使用Java ,但这很丑陋,我失去了所有不错的Scala集合功能,我不妨使用Java.

这是我目前的Java代码:https://gist.github.com/pathikrit/5574521

java scala treemap treeset scala-collections

19
推荐指数
2
解决办法
1529
查看次数