scala - Scala排序存在问题
问题描述
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] 和成本:Double。我试图按成本值的顺序对它们进行排序,最低成本->最高成本,但我遇到错误。
解决方案
tl;博士您的程序是正确的。您忽略了科学计数法中的指数。
由于我们可以用来尝试向您显示的数据是在图像中,所以我继续并“OCR-ed”了它。并做了这个:
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))
推荐阅读
- python - Tensorflow 中的 LSTM 模型应该有哪种格式的时间序列输入?
- php - PHP DOMDocument - 获取第一个顶层的所有元素
- c - 制作一个函数,显示一个单词在字符串/句子中出现的次数
- java - 在oracle的连接查询中如何知道属于哪个表列
- javascript - 如何测试 javascript 无限递归工作函数场景
- excel - 如何使图片适合范围(“A59:F59)VBA的单元格
- powershell - 如何检查数组日期是否处于特定模式
- c# - orA-01843: 批量上传 excel 时月份无效
- c# - 显示自最近的数据库 DateTime 以来经过的时间,并每隔一秒增加一次
- haskell - 在haskell中将一个元素从一个列表移动到另一个列表