Как объединить списки (и другие коллекции) в F #?

Предоставляет ли F # идиоматические способы конкатенации

  • последовательность и список вместе?
  • список и список вместе в список? (Неразрушающий)
  • список и список вместе в список, если он разрушительный?
  • изменяемые массивы вместе, разрушительно, в другой изменяемый массив?

И можете ли вы скомпоновать кортежи?

Ответ 1

последовательность и список вместе

Для этого нет специальной функции. Если последовательность первая, а вторая - вторая, вам нужно выбрать между преобразованием первого в список (а затем скопировать его при добавлении с помощью List.append) или с помощью Seq.append, за которым следует List.ofSeq, который скопирует оба списки.

Таким образом, имеет смысл написать свою собственную функцию.

список и список вместе в список? (Неразрушающий)

List.append делает это.

список и список вместе в список, если он является разрушительным

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

изменяемые массивы вместе, разрушительно, в другой изменяемый массив?

В .NET вы не можете изменять размеры массивов, поэтому нет никакого разрушительного способа сделать это. Array.append создает новый массив (и будет быстрее, чем другие параметры, поскольку он заранее знает размер результата).

И можете ли вы скомпоновать кортежи?

Нет. Система типов не позволяет вам выразить тип функции, которая будет добавлять кортежи (они должны иметь статически известный размер).

Ответ 2

Оператор @- это простой и удобный способ объединения нескольких списков:

let allElements = list1 @ list2 @ list3 @ list4 @ list5 @ list6