В данной статье мы рассмотрим списки в языке программирования Scala.
Список – это структура данных, которая содержит однотипные элементы, которые имеет ссылки на предыдущий и на следующий элемент. Важный момент – списки в Scala являются immutable.
Создание списка имеет следующую общую форму записи:
var ИМЯ_ПЕРЕМЕННОЙ: List[ТИП_ДАННЫХ] = List (ОБЪЕКТ_1, ОБЪЕКТ_2);
Для понимания того как это работает на практике, рассмотрим простой пример:
package net.proselyte.scalatutorial.collections
/**
* Scala class that demonstrates Lists in Scala.
*
* @author Eugene Suleimanov
*/
object ListDemo {
def main(args: Array[String]) {
val skills: List[String] = List("Java", "Scala", "SQL", "NoSQL", "Hibernate");
val salaries: List[Int] = List(10, 20, 30, 40, 50);
println("skills:" + skills);
println("salaries: " + salaries);
}
}
В результате выполнения данной программы мы получим следующий вывод в консоль:
skills:List(Java, Scala, SQL, NoSQL, Hibernate)
salaries: List(10, 20, 30, 40, 50)
Process finished with exit code 0
Данная программа может быть записана следующим образом:
package net.proselyte.scalatutorial.collections
/**
* Scala class that demonstrates cons in Scala.
*
* @author Eugene Suleimanov
*/
object ListConsDemo {
def main(args: Array[String]) {
val skills = "Java" :: ("Scala" :: ("SQL" :: ("NoSQL" :: ("Hibernate" :: Nil))));
val salaries = 10 :: (20 :: (30 :: (40 :: (50 :: Nil))));
println("skills:" + skills);
println("salaries: " + salaries);
}
}
Вывод в консоль будет аналогичен предыдущему варианту:
skills:List(Java, Scala, SQL, NoSQL, Hibernate)
salaries: List(10, 20, 30, 40, 50)
Process finished with exit code 0
Кроме того, в Scala мы можем создавать многомерные списки:
package net.proselyte.scalatutorial.collections
/**
* Scala class that demonstrates 2-dimensional list on Scala.
*
* @author Eugene Suleimanov
*/
object TwoDimensionalListDemo {
def main(args: Array[String]) {
val twoDimensionalList: List[List[String]] =
List(
List("A", "B", "C"),
List("D", "E", "F")
);
println("twoDimensionalList:");
println(twoDimensionalList);
}
}
Данная программа имеет следующий результат работы:
twoDimensionalList:
List(List(A, B, C), List(D, E, F))
Process finished with exit code 0
В Scala предусмотрена возможность создания списков для типа Nothing. Рассмотрим, как это выглядит на практике:
package net.proselyte.scalatutorial.collections
/**
* Scala class that demonstrates List of Nothing.
*
* @author Eugene Suleimanov
*/
object NothingListDemo {
def main(args: Array[String]) {
val nothingList:List[Nothing] = List();
println("nothingList: " + nothingList);
}
}
В результате выполнения данной программы мы получим следующий результат:
nothingList: List()
Process finished with exit code 0
Рассмотрим некоторые базовые операции со списками:
package net.proselyte.scalatutorial.collections
/**
* Scala class that demonstrates basic List operations.
*
* @author Eugene Suleimanov
*/
object ListBasicOperationsDemo {
def main(args: Array[String]) {
val list1 = 1 :: (2 :: (3 :: Nil));
val list2 = 4 :: (5 :: (6 :: Nil));
println("list1: " + list1);
println("list2: " + list2);
val commonList = List.concat(list1, list2);
println("commonList" + commonList);
println("Reversed commonList: " + commonList.reverse);
}
}
Результатом выполнения данной программы будет следующий вывод в консоль:
list1: List(1, 2, 3)
list2: List(4, 5, 6)
commonListList(1, 2, 3, 4, 5, 6)
Reversed commonList: List(6, 5, 4, 3, 2, 1)
Process finished with exit code 0
На этом мы заканчиваем обзор списков в Scala.