#scala
#scala
Вопрос:
Я испытываю трудности в scala, потому что я хочу отсортировать последовательность простого класса case, который выглядит следующим образом:
case class A(seqOfB: Seq[B],
order_index: Int)
case class B(name: String,
order_index: Int)
Как вы можете видеть, он содержит другой класс case. Что я хочу сделать, так это упорядочить Seq, который содержит 2 экземпляра A, по order_index из A. Первый элемент в последовательности имеет order_index 2 и имеет 1 B в своей последовательности. Второй элемент в Seq имеет order_index 1 и имеет 2 B в своем Seq:
val seqOfA = Seq(
A(
seqOfB = Seq(
B(
name ="cde",
order_index = 21
)
),
order_index = 2
),
A(
seqOfB = Seq(
B(
name = "abc",
order_index = 11
),
B(
name = "bcd",
order_index = 12
)
),
order_index = 1
)
)
Мой код для сортировки выглядит следующим образом:
seqOfA.sortBy(_.order_index)
println(seqOfA)
Вопреки моим ожиданиям, функция sortBy() ничего не делает, и последовательность никак не меняется. Невозможно ли в Scala отсортировать конструкцию, подобную моей, или есть другой способ добиться того, чего я хочу?
Я также пробовал сортировать с помощью функции sortWith(), но она также ничего не делает.
Ответ №1:
Это неизменяемые структуры данных. Вы не сортируете их на месте — вы возвращаете обновленные значения из методов.
seqOfA.sortBy(_.order_index)
println(seqOfA)
Совпадает с
val oldValue = seqOfA
val newValue = oldValue.sortBy(_.order_index)
println(oldValue)
Если вы хотите увидеть желаемые результаты, просто присвоите результат sortBy переменной и выведите эту переменную.