Scala сортировка с проблемами - PullRequest
0 голосов
/ 22 марта 2020
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. Я пытаюсь отсортировать их в порядке их стоимости, наименьшей стоимости-> наивысшей стоимость, но я сталкиваюсь с ошибкой.

Вот что печатается, когда я запускаю программу, вместо сортировки по стоимости, она сортируется по абсолютному значению первого двойника в списке генов. Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 23 марта 2020

tl; dr Ваша программа правильная. Вы пренебрегаете показателем в научной нотации c.

Поскольку данные, которые мы могли использовать, чтобы попытаться показать вам, были на изображении, я пошел дальше и «распечатал» его. И сделал это:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...