- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定 Tuple2 的列表,我想对它们进行排序,以便其中一个的第二个元素是下一个的第一个元素。我试过用 sortWith 来做,但它在某些情况下有效,但在其他情况下无效。谁能看出我哪里搞砸了?
Welcome to Scala version 2.10.3-20130923-e2fec6b28dfd73482945ffab85d9b582d0cb9f17 (OpenJDK 64-Bit Server VM, Java 1.7.0_71).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val l = List((2,3),(1,2),(3,4))
l: List[(Int, Int)] = List((2,3), (1,2), (3,4))
scala> l.sortWith((x,y) => x._2 == y._1)
res0: List[(Int, Int)] = List((1,2), (2,3), (3,4))
scala> val m = List((2,3),(5,6),(1,2),(3,4),(4,5))
m: List[(Int, Int)] = List((2,3), (5,6), (1,2), (3,4), (4,5))
scala> m.sortWith((x,y) => x._2 == y._1)
res1: List[(Int, Int)] = List((2,3), (5,6), (1,2), (3,4), (4,5))
非常感谢
最佳答案
sortWith 基本上说,如果条件为真,那么第一个参数应该在第二个参数之前出现,如果条件为假,那么它们应该以另一种方式排序。对于绝大多数比较,您的 sortWith 条件返回 false,这会将事情推向右侧,即使之前的比较表明某些事情应该更靠左。
简而言之,您的 sortWith 不一致,您得到的结果也不一致。
在提出通用解决方案之前,您必须处理问题空间中的一些深层问题。您基本上要做的是对任意有向图进行排序。这意味着它可以有循环、断开连接的子图和各种其他排除任何明显总排序的事物。
但是,如果我们可以假设您可以避免循环,那么拓扑排序可能会为您提供更接近您正在寻找的结果的结果。基本上你需要的属性不仅仅是“如果这个人的右点等于那个人的左点,就把这个放在那个之前”,而是更像是“如果 [all that] 否则我们不这样做,把这个放在那个之前没有足够的信息来比较它们。” sortWith 不够复杂,无法进行拓扑排序。它假设所有元素都可以直接进行有意义的比较。
关于list - 使用 sortWith 对链式元组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745162/
给定 Tuple2 的列表,我想对它们进行排序,以便其中一个的第二个元素是下一个的第一个元素。我试过用 sortWith 来做,但它在某些情况下有效,但在其他情况下无效。谁能看出我哪里搞砸了? Wel
我想按如下方式应用自定义排序比较器: myString.sortWith{ case (c1,c2) => c1.compareTo(c2) c1.compareTo(c2) val str =
我需要在 scala 上制作 java ArrayList 它是类、文件-字段的排序方法。要使用 ArrayList,我导入了 java.util.ArrayList 和 scala.collecti
我正在尝试对一组对象进行排序。 当我尝试使用 sortWith 函数只对对象中的一个字段进行排序时,它工作得很好。 当多个字段被排序时,它就会搞砸。 例如。 scala> val res = bran
我在使用 Ramda sortWith 按多列(升序或降序)对深度嵌套的对象数组进行排序时遇到问题。显然,排序是区分大小写的,并且导致以小写字母开头的值被放置到排序数组的最末尾。 首先,我导入必要的
我使用下面的 sortwith 方法对我的 ArrayList 进行排序,我想它会将订单号从小到大排序。比如10、9、8、7、6....0。但是结果不是我所期望的。请帮助解决这个问题。 company
我在 scala(2.11.8 和 2.12.1)中遇到 Seq[(Long, Double)] _._2) output >>> Seq[(Long, Double)] = List((11,11.
Scala 在标准库中包含了几种对列表进行排序的方法,例如对列表列表进行排序,可以使用: list.sorted list.sortWith(_x) 虽然这些可能是对列表进行排序的最简单方法,但我发现
我只是在探索 kotlin 集合,我观察到了一个重要的行为。 val sports = listOf( Sports("cricket", "7"), Sports("
我是一名优秀的程序员,十分优秀!