Предпочтительный способ создать список Scala

Некоторые из моих примечаний:

Позволяет асинхронную передачу

  • Между процессами, принадлежащими тому же пользователю
  • От системы до любого процесса
  • От администратора системы к любому процессу
  • , Вся связанная информация находится в самом сигнале
  • Много различных сигналов

SIGINT

  • От системы до всех процессов, связанных с Триггером терминала
  • : ^C нажал
  • Usual способ остановить рабочий процесс

SIGFPE

  • От ядра до единственного процесса
  • Триггер: ошибка в операции с плавающей точкой

SIGKILL

  • К единственному процессу
  • Остановки выполнение целевого процесса

SIGALRM

  • От ядра до единственного процесса
  • Триггер: истечение таймера

SIGTERM

  • К единственному процессу
  • Рекомендует процессу завершиться корректно

SIGUSR1, SIGUSR2

  • От любого процесса до любого другого
  • Без предопределенного семантического
  • Свободно применимый программистами

Отправка сигнала к другому процессу

  • международное уничтожение (изодромный с предварением, signal_ID)

, программист может решить, что сделать, когда сигнал получен

  • Использование, поведение по умолчанию
  • Игнорирует, это
  • Выполняет функцию пользователя

, Обнаруживающую прерванную запись

if (write(fd, buff, SIZE)<0) {
  switch (errno) {
   case EINTR:
    warning(“Interrupted write\n”);
    break;
  }
}…
116
задан Peter Mortensen 3 May 2013 в 17:22
поделиться

5 ответов

ListBuffer - это изменяемый список, который имеет добавление с постоянным временем и преобразование с постоянным временем в список List .

Список является неизменяемым и имеет добавление с постоянным временем и добавление с линейным временем.

То, как вы создаете свой список, зависит от алгоритма, для которого вы будете использовать список, и порядка, в котором вы получаете элементы для его создания.

Например, если вы получаете элементы в порядке, обратном порядку их использования, тогда вы можете просто использовать List и выполнять добавление. Сделаете ли вы это с помощью хвостовой рекурсивной функции, foldLeft или чего-то еще, на самом деле не имеет значения.

Если вы получите элементы в том же порядке, в котором вы их используете, то ListBuffer , скорее всего, является предпочтительным выбором, если производительность критична.

Но, если вы не на критическом пути и входной сигнал достаточно низкий, вы всегда можете перевернуть список позже, или просто свернуть вправо , или перевернуть ввод, которое является линейным временем.

Что вы НЕ делаете, так это использовать List и добавлять к нему. Это даст вам гораздо худшую производительность, чем просто добавление и реверсирование в конце.

108
ответ дан 24 November 2019 в 02:16
поделиться

А для простых случаев:

val list = List(1,2,3) 

:)

65
ответ дан 24 November 2019 в 02:16
поделиться

Я всегда предпочитаю List и использую «свернуть / уменьшить» перед «для понимания». Однако «для понимания» предпочтительнее, если требуются вложенные «складки». Рекурсия - последнее средство, если я не могу выполнить задачу с помощью «fold / reduce / for».

поэтому для вашего примера я сделаю:

((0 to 3) :\ List[Int]())(_ :: _)

, прежде чем я сделаю:

(for (x <- 0 to 3) yield x).toList

Примечание: я использую «foldRight ( : \) "вместо" foldLeft (/ :) "здесь из-за порядка" _ ". Для версии, которая не генерирует исключение StackOverflowException, используйте вместо этого «foldLeft».

2
ответ дан 24 November 2019 в 02:16
поделиться

Умм .. это кажется мне слишком сложным. Могу я предложить

def listTestD = (0 to 3).toList

или

def listTestE = for (i <- (0 to 3).toList) yield i
22
ответ дан 24 November 2019 в 02:16
поделиться

Примечание. Этот ответ написан для старой версии Scala.

Классы коллекций Scala будут переработаны в Scala 2.8, поэтому будьте готовы изменить способ создания списков. очень скоро.

Каков способ создания Списка с прямой совместимостью? Понятия не имею, так как я еще не читал документы 2.8.

PDF-документ, описывающий предлагаемые изменения классов коллекций

2
ответ дан 24 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: