问题标签 [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 投票
4 回答
647 浏览

scala - 是否有一种内置的更优雅的按元素类型过滤和映射集合的方式?

例如,如果我想缩小Iterable[A]特定类型(例如String)的所有元素的范围,我可以这样做:

但是,显然希望将用作Iterable[String]可以通过 a 完成的操作map

这很丑陋。当然我可以flatMap改用:

但我不确定这是否更具可读性!我写了一个函数,narrow,它可以通过implicit转换来使用:

但我想知道是否有一个我忽略的更好的内置机制。特别是因为能够将 a 缩小List[A]到 a List[String],而不是Iterable[String]像我的函数那样缩小到 a 会很好。

0 投票
4 回答
36844 浏览

scala - Scala 2.8 突破

在 Scala 2.8中,有一个对象scala.collection.package.scala

我被告知这会导致:

这里发生了什么?为什么breakOut被称为my的参数List

0 投票
1 回答
19740 浏览

scala - Scala 2.8 集合设计教程

我喘不过气来的困惑之后,有哪些很好的资源可以解释新的Scala 2.8集合库是如何构建的。我有兴趣找到一些有关以下内容如何组合在一起的信息:

  • 集合类/特征本身(例如ListIterable
  • 为什么存在Like类(例如TraversableLike
  • 伴随方法的用途(例如List.companion
  • 我如何知道implicit在给定点的范围内有哪些对象
0 投票
18 回答
114803 浏览

scala - Scala 2.8 收藏库是“历史上最长的遗书”吗?

我刚刚开始研究即将发布的2.8版本中的Scala 集合库重新实现。熟悉 2.7 中的库的人会注意到,从使用的角度来看,该库几乎没有变化。例如...

...在任何一个版本中都可以使用。该库非常有用:事实上它太棒了。然而,那些以前不熟悉 Scala 并四处寻找语言的人现在必须理解方法签名,例如:

对于如此简单的功能,这是一个令人生畏的签名,我发现自己很难理解。并不是说我认为 Scala 有可能成为下一个 Java(或 /C/C++/C#)——我不相信它的创造者将它瞄准了那个市场——但我认为 Scala 成为/肯定是可行的下一个 Ruby 或 Python(即获得重要的商业用户群)

  • 这会阻止人们来 Scala 吗?
  • 这是否会让 Scala 在商业世界中名声不佳,成为只有敬业的博士生才能理解的学术玩物?CTO和软件负责人会被吓跑吗?
  • 图书馆重新设计是一个明智的想法吗?
  • 如果你在商业上使用 Scala,你会担心这个吗?您打算立即采用 2.8 还是等着看会发生什么?

Steve Yegge 曾经攻击过 Scala(在我看来是错误的),因为他认为 Scala 的类型系统过于复杂。我担心有人会用这个 API 来散布FUD(类似于 Josh Bloch 如何让JCP害怕向 Java 添加闭包)。

注意-我应该明确一点,虽然我相信Joshua Bloch在拒绝 BGGA 关闭提案方面具有影响力,但我不会将此归因于他诚实地认为该提案代表错误的信念。


不管我的妻子和同事一直告诉我什么,我不认为我是个白痴:我在牛津大学获得了很好的数学学位,我已经从事商业编程将近 12 年,并且在Scala中工作了大约一年(也是商业)。

请注意,煽动性主题标题是对 1980 年代初期英国政党宣言的引用。这个问题是主观的,但它是一个真实的问题,我已经把它变成了 CW,我想就此事发表一些意见。

0 投票
3 回答
1381 浏览

arrays - When should I use Scala's Array instead of one of the other collections?

This is more a question of style and preference but here goes: when should I use scala.Array? I use List all the time and occasionally run into Seq, Map and the like, but I've never used nor seen Array in the wild. Is it just there for Java compatibility? Am I missing a common use-case?

0 投票
1 回答
226 浏览

generics - 为什么在 GenericTraversableTemplate 上声明 flatten 而不是 TraversableLike?

的签名TraversableLike.flatMap如下:

的签名GenericTraversableTemplate.flatten是:

为什么后一种方法(在我看来flatMap仅在变压器函数是 的意义上有所不同implicit)不能定义TraversableLike为:

有什么理由必须是这种情况吗?

0 投票
1 回答
1242 浏览

scala - Scala TreeMap 奇怪;实现逆序排序

我有一个Map[Long, String]我想按键的降序迭代。我选择这样做的方式如下:

我真的不确定我是否理解为什么这不起作用,只能假设我犯了一些愚蠢的错误。当然,以下工作:

0 投票
2 回答
1678 浏览

scala - 如何形成 scala SortedMaps 的联合?

(我正在使用 Scala nightlies,并在 2.8.0b1 RC4 中看到相同的行为。我是 Scala 新手。)

我有两个SortedMap要组成联合的 s。这是我想使用的代码:

这里的想法是“隐式”语句意味着Xs 可以转换为s,然后将s 组合成另一个Ordered[X]是有意义的,而不仅仅是一个映射。SortedMapSortedMap

当我编译时,我得到

如果该类型参数绑定是[A <% scala.math.Ordered[A]],而不是[A <: scala.math.Ordered[A]]. 不幸的是,我什至无法弄清楚“有序”方法的位置!任何人都可以帮我追踪它吗?

如果做不到这一点,我该怎么做才能产生两个SortedMaps 的并集?如果我删除 combine 的返回类型(或将其更改为Map)一切正常 --- 但是我不能依赖返回被排序!

0 投票
4 回答
15818 浏览

scala - Scala 中流的用例

在 Scala 中有一个非常像迭代器的 Stream 类。Scala中迭代器和流的区别?对两者之间的异同提供了一些见解。

了解如何使用流非常简单,但我没有很多常见的用例,我会使用流而不是其他工件。

我现在的想法:

  • 如果您需要使用无限系列。但这对我来说似乎不是一个常见的用例,所以它不符合我的标准。(如果它很常见,请纠正我,我只是有一个盲点)
  • 如果您有一系列数据,其中每个元素都需要计算,但您可能希望重复使用多次。这很弱,因为我可以将它加载到一个列表中,从概念上讲,对于大部分开发人员来说更容易理解。
  • 也许有大量数据或计算量很大的系列,并且您需要的项目很可能不需要访问所有元素。但在这种情况下,除非您需要进行多次搜索,否则 Iterator 将是一个很好的匹配,在这种情况下,您也可以使用列表,即使它的效率会稍低一些。
  • 有一系列复杂的数据需要重用。这里也可以使用一个列表。尽管在这种情况下,这两种情况都同样难以使用,并且 Stream 会更合适,因为并非所有元素都需要加载。但又不是那么常见……或者是吗?

所以我错过了任何重要的用途吗?还是在很大程度上是开发人员的偏好?

谢谢

0 投票
2 回答
986 浏览

scala - 如何让 Scala 的不可变集合保存不可变对象

我正在评估 Scala,但它的不可变集合存在问题。

我想制作不可变的集合,它们是完全不可变的,一直贯穿所有包含的对象,它们引用的对象,无穷无尽。

有没有一种简单的方法可以做到这一点?

http://www.finalcog.com/immutable-containers-scala上的代码说明了我想要实现的目标,以及一个令人讨厌的工作(ImmutablePoint)。

解决方法的问题是,每次我想更改一个对象时,我都必须手动制作一个新副本。我知道运行时必须实现写时复制,但这可以对开发人员透明吗?

我想我正在寻找不可变对象,其中方法更改当前对象状态,但对对象的所有其他“val”(和所有不可变容器)引用都保留“旧”状态。