问题标签 [scala-collections]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
11334 浏览

scala - 斯卡拉创建列表[整数]

如何快速创建一个List[Int]包含 1 到 100 的内容?

我试过List(0 to 100)了,但它返回List[Range.Inclusive]

谢谢

0 投票
1 回答
1564 浏览

scala - 如何在 Scala 2.8 中实现集合?

在尝试编写 API 时,我在 Scala 的 2.8(.0-beta1) 集合中苦苦挣扎。

基本上我需要的是写一些东西:

  • 向某种类型的不可变集合添加功能
  • 像 filter 和 map 这样的所有方法都返回相同类型的集合,而不必覆盖所有内容(这就是我首先选择 2.8 的原因)
  • 您通过这些方法获得的所有集合都使用与原始集合相同的参数构造(类似于 SortedSet 如何通过隐式进行排序)
  • 这本身仍然是一个特征,独立于任何集合实现。

此外,我想定义一个默认实现,例如基于 HashSet。特征的伴生对象可能会使用此默认实现。我还不确定是否需要构建器工厂的全部功能将我的集合类型映射到其他集合类型。

我阅读了关于重新设计集合 API的论文,但从那时起事情似乎发生了一些变化,我在那里遗漏了一些细节。我还研究了集合源代码,但我不确定它是否非常一致。

理想情况下,我希望看到的是一个动手教程,它一步一步地告诉我我需要的部分,或者对所有细节的广泛描述,这样我就可以判断自己需要哪些部分。我喜欢“Scala 编程”中关于对象相等的章节。:-)
但我感谢任何有助于我更好地理解新系列设计的文档或示例的指针。

0 投票
3 回答
529 浏览

scala - Scala 的瞬态集合?

Clojure 有一个非常好的瞬态集合概念。是否有提供 Scala(或 F#)的库?

0 投票
3 回答
599 浏览

scala - 突破特定集合类型的捷径?

我想要的是结果类型为 List[(Int, Int, Int)]。我找到的唯一方法是:

有没有更短的方法?

0 投票
3 回答
2315 浏览

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

我知道Traversable,你只需要一个foreach方法。Iterable需要一个iterator方法。

Scala 2.8 集合 SID 和“Fighting Bitrot with Types”论文基本上都没有提到为什么Traversable要添加这个主题。SID 只说“David McIver...提议 Traversable 作为 Iterable 的推广”。

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

以下可能与我的问题有关。中有一些看起来很奇怪的函数定义TraversableLike.scala,例如:

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

0 投票
1 回答
1835 浏览

scala - 为什么 Option 不直接扩展 Iterable 特征?

Option可以隐式转换为Iterable- 但为什么它不只是直接实现Iterable

编辑: 事实上它甚至比这更复杂,因为在 2.8Option中确实声明了一个iterator方法

0 投票
3 回答
2260 浏览

scala - 我可以在 Scala 中创建一个使用不同 equals/hashCode/compare 实现的集合吗?

我正在寻找创建身份集的简单方法。我只是希望能够在遍历图表时跟踪我是否“看到”了特定对象。

我不能使用常规 Set 因为 Set 使用“==”(Scala 中的 equals 方法)来比较元素。我想要的是一个使用“eq”的集合。

有什么方法可以在 Scala 中创建一个 Set 使用某些应用程序指定的方法来测试相等性,而不是在 set 元素上调用 equals ?我寻找某种可以覆盖但没有找到的“wrapEquals”方法。

我知道我可以使用 Java 的 IdentityHashMap,但我正在寻找更通用的东西。

我的另一个想法是将每个 set 元素包装在另一个根据 eq 实现 equals 的对象中,但是为了获得新的 equals 实现而生成大量新对象是浪费的。

谢谢!

0 投票
2 回答
3445 浏览

scala - 如何在scala中创建排序地图?

如何在scala(可变/不可变)中创建排序映射?

0 投票
3 回答
75475 浏览

arrays - scala中数组和列表的区别

在什么情况下我应该使用 Array(Buffer) 和 List(Buffer)。我知道的唯一区别是数组是不变的,而列表是协变的。但是性能和其他一些特性呢?

0 投票
1 回答
810 浏览

generics - Traversable的继承和类型参数

我正在研究 Scala 2.8 集合类的源代码。我对scala.collection.Traversable. 查看以下声明:

问题:为什么用类型参数Traversable扩展- 为什么不呢?我尝试了一些具有相同结构的小程序的实验,当我尝试将其更改为时收到一条奇怪的错误消息:GenericTraversableTemplate[A, Traversable][A, Traversable[A]]Traversable[A]

我想@uncheckedVariance注释的使用GenericTraversableTemplate也与此有关?(这似乎是一种潜在的不安全黑客来迫使事情正常工作......)。

编辑- 在这个问题中找到了一些关于注释的有用答案(这是因为GenericTraversableTemplate用于具有不同方差的可变和不可变集合)。

问题:当您查看层次结构时,您会看到它Traversable继承HasNewBuilder了两次(一次 viaTraversableLike和一次 via GenericTraversableTemplate),但类型参数略有不同。这究竟是如何工作的?为什么不同的类型参数不会导致错误?