Как бы вы добавили элемент из конца списка в Scala и добавили его в конец другого списка? - PullRequest
0 голосов
/ 09 апреля 2019

Извините, если это глупый вопрос, но в настоящее время я работаю с двумя списками, и я хотел бы знать, каков наилучший способ извлечь последний элемент из одного списка и добавить его в конец другого списка в Scala?Я не могу найти поп-эквивалент Python в Scala, поэтому я немного запутался

Например:

list1: List1[Int] = List(4,5,6)

list2: List2[Int] = List(5,7,8)

Оттуда я хочу добавить последний элемент Списка 2 вList1 и return

list3: List1[Int] = List(4,5,6,8)

list4: List2[Int] = List(5,7)

Буду признателен за любую помощь, относительно новую для Scala

Ответы [ 5 ]

1 голос
/ 09 апреля 2019

Легко вычислить list4, используя init, но list3 нуждается в заботе, потому что list2 может быть пустым.Это безопасный способ сделать это:

list3 = list1 ++ list2.takeRight(1)
list4 = list2.init
1 голос
/ 09 апреля 2019

Если вы можете изменить свой подход к использованию неизменяемого списка, вы можете достичь этого

val list1 = List(4,5,6)
val list2 = List(5,7,8)
val list3 = list1 :+ list2.last
val list4 = list2.dropRight(1)
println(list3, list4)

выход

(List(4, 5, 6, 8),List(5, 7))
1 голос
/ 09 апреля 2019

Поскольку вы хотите манипулировать списком, вы можете использовать mutable коллекций Scala, что настоятельно не рекомендуется.Но просто чтобы дать представление об этом, вот как вы можете это сделать:

  val list1 = mutable.ListBuffer(4,5,6)
  val list2 = mutable.ListBuffer(5,7,8)

  val dropped = list2.remove(list2.size - 1)

  println(list2)
  list1.append(dropped) // OR you can use => 
  // list1 += dropped
  println(list1)

Обновление : вот несколько вариантов без создания List mutable.Теперь вы можете сделать из него новые списки, например newList1 и newList2, или сделать их переменными var.

Отказ от ответственности: наличие var s в вашем Scala-коде - это большое НО, если вы действительно не уверены в том, почему вы это делаете.

Вот пример(аналогично вышеуказанному) код для обоих подходов:

  1. с newList1 и newList2
 val list1 = List(4,5,6)
 val list2 = List(5,7,8)

 val (newList2, dropped) = list2.splitAt(list2.size - 1)

 val newList1 = list1 ++ dropped

 println(newList2)
 println(newList1)
С var с
var list1 = List(4,5,6)
var list2 = List(5,7,8)

val result = list2.splitAt(list2.size - 1)
val dropped = result._2
list2 = result._1
list1 = list1 ++ dropped

println(list2)
println(list1)
0 голосов
/ 09 апреля 2019

Вам не нужно использовать изменяемый список, вы можете сделать это с помощью простых операций, таких как last и drop.

val list1 = List(4,5,6)

val list2= List(5,7,8)

что вы можете сделать:

//val lastElem = list1.last // can cause an error if list is empty

can use takeRight instead

val lastElem = list1.takeRight(1)

print(list1 :+ lastElem, list2.drop(1)) // output, List(4,5,6,8), List(5, 7)

Вы также можете сохранить эти значения в новое значение

val appenedList = list1:+lastElem
val popedList = list2.drop(1)

как это помогает !!

0 голосов
/ 09 апреля 2019

Вы можете просто использовать init (который противоположен tail) и last (который противоположен head) метод scala list.

val list1 = List(1,2,3)
val list2 = List(4,5,6)

val newList1 = list1 ++ List(list2.last)   // return 1,2,3,6
val newList2 = list2.init   // return 4,5
...