Scala sort有问题

问题描述 投票:0回答:1
val population: List[Animal] = for (animal <- animals) yield {
    val value: T = incubator(animal.genes)
    new Animal(animal.genes, costFunction(value))
  }
  for (x<-population){
    println(x.cost + " " + x.genes)
  }

  println("sorted:")

  val orderedAnimals: List[Animal] = population.sortWith(_.cost < _.cost)
  for (i<-orderedAnimals){
    println(i.cost + " " + i.genes)
  }
  println("-------------------")
  println()

因此,我有一个动物对象列表(动物具有两个属性;基因:List [Double]和cost:Double。我试图按它们的成本值,最低成本->最高成本对它们进行排序,但我遇到错误。

这里是我运行程序时要打印的内容,而不是按成本值排序,而是按基因列表中第一个double值的绝对值排序。有人知道我在做什么错吗?

scala sorting
1个回答
0
投票

tl; dr您的程序正确。您正在忽略科学计数法的指数。

由于我们可以用来尝试向您显示的数据是在一张图片中,因此我进行了“ OCR编辑”。并做了这个:

scala> List(6.434636141757189E8, 6.048938092998665E9, 4.08466301816955E9, 2.038557228389767E10).sorted // copied from the first block (before "sorted")
res1: List[Double] = List(6.434636141757189E8, 4.08466301816955E9, 6.048938092998665E9, 2.038557228389767E10)

scala> List(6.434636141757189E8, 4.08466301816955E9, 6.048938092998665E9, 2.038557228389767E10) // copied from the 2nd block (after "sorted:")
res2: List[Double] = List(6.434636141757189E8, 4.08466301816955E9, 6.048938092998665E9, 2.038557228389767E10)

并确认我们的假设,我们可以做一个小实验:

scala> List(6.434636141757189E8, 6.048938092998665E9, 4.08466301816955E9,
 2.038557228389767E10).sorted.sliding(2)
  .toList.collect{ case List(small, big) => small < big } // (*)
res7: List[Boolean] = List(true, true, true)

QED:)

(*)sliding(2)

scala> List(1,2,3,4).sliding(2).toList
res8: List[List[Int]] = List(List(1, 2), List(2, 3), List(3, 4))
© www.soinside.com 2019 - 2024. All rights reserved.