在 Scala 中将 Int 列表转换为 SortedSet

发布于 2024-11-23 22:13:46 字数 259 浏览 4 评论 0原文

如果我有一个整数列表,例如:

val myList = 列表(3,2,1,9)

从列表或整数序列创建 SortedSet 的正确/首选方法是什么,其中项目按从最小到最大排序?

如果你用枪指着我的头我会说:

val itsSorted = collection.SortedSet(myList)

但我收到一个错误,提示没有为 List[Int] 定义隐式排序。

If I have a List of Ints like:


val myList = List(3,2,1,9)

what is the right/preferred way to create a SortedSet from a List or Seq of Ints, where the items are sorted from least to greatest?

If you held a gun to my head I would have said:


val itsSorted = collection.SortedSet(myList)

but I get an error regarding that there is no implicit ordering defined for List[Int].

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

时间海 2024-11-30 22:13:46

使用:

collection.SortedSet(myList: _*)

按照您使用的方式,编译器认为您想要创建 SortedSet[List[Int]] 而不是 SortedSet[Int]。这就是为什么它抱怨 List[Int] 没有隐式排序。

请注意方法签名中 A* 类型的重复参数:

def apply [A] (elems: A*)(implicit ord: Ordering[A]): SortedSet[A]

要将 myList 视为 A 使用的序列参数,_* 类型注释。

Use:

collection.SortedSet(myList: _*)

The way you used it, the compiler thinks you want to create a SortedSet[List[Int]] not a SortedSet[Int]. That's why it complains about no implicit Ordering for List[Int].

Notice the repeated parameter of type A* in the signature of the method:

def apply [A] (elems: A*)(implicit ord: Ordering[A]): SortedSet[A]

To treat myList as a sequence argument of A use, the _* type annotation.

挥剑断情 2024-11-30 22:13:46

您还可以利用 CanBuildFrom 实例,并执行以下操作:

val myList = List(3,2,1,9)
myList.to[SortedSet]
// scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2, 3, 9)

You could also take advantage of the CanBuildFrom instance, and do this:

val myList = List(3,2,1,9)
myList.to[SortedSet]
// scala.collection.immutable.SortedSet[Int] = TreeSet(1, 2, 3, 9)
海夕 2024-11-30 22:13:46

似乎没有直接接受 List 的构造函数(如果我错了,请纠正我)。但你可以轻松地写出

val myList = List(3,2,1,9)
val itsSorted = collection.SortedSet.empty[Int] ++ myList

相同的效果。 (参见http://www.scala-lang.org/docu/files/collections- api/collections_20.html。)

There doesn't seem to be a constructor that directly accepts List (correct me if I'm wrong). But you can easily write

val myList = List(3,2,1,9)
val itsSorted = collection.SortedSet.empty[Int] ++ myList

to the same effect. (See http://www.scala-lang.org/docu/files/collections-api/collections_20.html.)

情痴 2024-11-30 22:13:46

如果您无论如何都必须映射,这尤其有用:

import scala.collection.breakOut

val s: collection.SortedSet[Int] = List(1,2,3,4).map(identity)(breakOut)
//--> s: scala.collection.SortedSet[Int] = TreeSet(1, 2, 3, 4)

This is especially useful if you have to map anyway:

import scala.collection.breakOut

val s: collection.SortedSet[Int] = List(1,2,3,4).map(identity)(breakOut)
//--> s: scala.collection.SortedSet[Int] = TreeSet(1, 2, 3, 4)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文