Учебники

F # — Наборы

Набор в F # — это структура данных, которая действует как набор элементов без сохранения порядка вставки элементов. Наборы не позволяют дублировать записи для вставки в коллекцию.

Создание наборов

Наборы могут быть созданы следующими способами —

  • Создавая пустой набор с помощью Set.empty и добавляя элементы с помощью функции add.
  • Преобразование последовательностей и списков в наборы.

Следующая программа демонстрирует методы —

Live Demo

(* creating sets *)
let set1 = Set.empty.Add(3).Add(5).Add(7). Add(9)
printfn"The new set: %A" set1

let weekdays = Set.ofList ["mon"; "tues"; "wed"; "thurs"; "fri"]
printfn "The list set: %A" weekdays

let set2 = Set.ofSeq [ 1 .. 2.. 10 ]
printfn "The sequence set: %A" set2

Когда вы компилируете и запускаете программу, она выдает следующий вывод:

The new set: set [3; 5; 7; 9]
The list set: set ["fri"; "mon"; "thurs"; "tues"; "wed"]
The sequence set: set [1; 3; 5; 7; 9]

Основные операции над наборами

В следующей таблице приведены основные операции над наборами —

Значение Описание
добавить: ‘T → Set <‘ T> → Set <‘T> Возвращает новый набор с элементом, добавленным в набор. Исключение не возникает, если набор уже содержит данный элемент.
содержит: ‘T → Set <‘ T> → bool Значение true, если данный элемент находится в заданном наборе.
count: Set <‘T> → int Возвращает количество элементов в наборе.
Разница: Установите <‘T> → Установите <‘ T> → Установите <‘T> Возвращает новый набор, в котором элементы второго набора удалены из первого.
пусто: Set <‘T> Пустой набор для указанного типа.
существует: (‘T → bool) → Set <‘ T> → bool Проверяет, удовлетворяет ли какой-либо элемент коллекции указанному предикату. Если входной функцией является предикат, а элементами являются i0 … iN, то эта функция вычисляет предикат i0 или … или предикат iN.
фильтр: (‘T → bool) → Set <‘ T> → Set <‘T> Возвращает новую коллекцию, содержащую только те элементы коллекции, для которых данный предикат возвращает true .
свернуть: (‘State →’ T → ‘State) →’ State → Set <‘T> →’ State Применяет данную функцию накопления ко всем элементам набора.
foldBack: (‘T →’ State → ‘State) → Установить <‘ T> → ‘State →’ State Применяет данную функцию накопления ко всем элементам набора.
forall: (‘T → bool) → Установить <‘ T> → bool Проверяет, все ли элементы коллекции удовлетворяют данному предикату. Если входная функция p, а элементы i0 … iN, то эта функция вычисляет p i0 && … && p iN.
пересекаются: Set <‘T> → Set <‘ T> → Set <‘T> Вычисляет пересечение двух множеств.
intersectMany: seq <Set <‘T >> → Set <‘ T> Вычисляет пересечение последовательности множеств. Последовательность должна быть не пустой.
isEmpty: Set <‘T> → bool Возвращает true, если набор пуст.
isProperSubset: Set <‘T> → Set <‘ T> → bool Значение true, если все элементы первого набора находятся во втором, и хотя бы один элемент второго не находится в первом.
isProperSuperset: Set <‘T> → Set <‘ T> → bool Значение true, если все элементы второго набора находятся в первом, и хотя бы один элемент первого не находится во втором.
isSubset: Set <‘T> → Set <‘ T> → bool Значение true, если все элементы первого набора находятся во втором.
isSuperset: Set <‘T> → Set <‘ T> → bool Значение true, если все элементы второго набора находятся в первом.
iter: (‘T → единица измерения) → Установить <‘ T> → единицу измерения Применяет данную функцию к каждому элементу набора в порядке, соответствующем функции сравнения.
карта: (‘T →’ U) → Set <‘T> → Set <‘ U> Возвращает новую коллекцию, содержащую результаты применения данной функции к каждому элементу входного набора.
maxElement: установите <‘T> →’ T Возвращает самый высокий элемент в наборе в соответствии с порядком, используемым для набора.
minElement: Установите <‘T> →’ T Возвращает самый низкий элемент в наборе в соответствии с порядком, используемым для набора.
ofArray: ‘T массив → Set <‘ T> Создает набор, который содержит те же элементы, что и данный массив.
ofList: ‘T list → Set <‘ T> Создает набор, который содержит те же элементы, что и данный список.
ofSeq: seq <‘T> → Set <‘ T> Создает новую коллекцию из данного перечисляемого объекта.
раздел: (‘T → bool) → Set <‘ T> → Set <‘T> * Set <‘ T> Разбивает набор на два набора, содержащих элементы, для которых данный предикат возвращает true и false соответственно.
удалить: ‘T → Set <‘ T> → Set <‘T> Возвращает новый набор с удаленным заданным элементом. Исключение не возникает, если набор не содержит данный элемент.
синглтон: ‘T → Set <‘ T> Набор, содержащий данный элемент.
toArray: установить массив <‘T> →’ T Создает массив, содержащий элементы набора по порядку.
toList: Установить <‘T> →’ T список Создает список, содержащий элементы набора по порядку.
toSeq: Set <‘T> → seq <‘ T> Возвращает упорядоченное представление коллекции как перечислимый объект.
объединение: Set <‘T> → Set <‘ T> → Set <‘T> Вычисляет объединение двух наборов.
unionMany: seq <Set <‘T >> → Set <‘ T> Вычисляет объединение последовательности множеств.

В следующем примере демонстрируется использование некоторых из перечисленных выше функций.

пример

Live Demo

let a = Set.ofSeq [ 1 ..2.. 20 ]
let b = Set.ofSeq [ 1 ..3 .. 20 ]
let c = Set.intersect a b
let d = Set.union a b
let e = Set.difference a b

printfn "Set a: "
Set.iter (fun x -> printf "%O " x) a
printfn""

printfn "Set b: "
Set.iter (fun x -> printf "%O " x) b
printfn""

printfn "Set c = set intersect of a and b : "
Set.iter (fun x -> printf "%O " x) c
printfn""

printfn "Set d = set union of a and b : "
Set.iter (fun x -> printf "%O " x) d
printfn""

printfn "Set e = set difference of a and b : "
Set.iter (fun x -> printf "%O " x) e
printfn""

Когда вы компилируете и запускаете программу, она выдает следующий вывод: