Набор в F # — это структура данных, которая действует как набор элементов без сохранения порядка вставки элементов. Наборы не позволяют дублировать записи для вставки в коллекцию.
Создание наборов
Наборы могут быть созданы следующими способами —
- Создавая пустой набор с помощью Set.empty и добавляя элементы с помощью функции add.
- Преобразование последовательностей и списков в наборы.
Следующая программа демонстрирует методы —
(* 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> | Вычисляет объединение последовательности множеств. |
В следующем примере демонстрируется использование некоторых из перечисленных выше функций.
пример
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""
Когда вы компилируете и запускаете программу, она выдает следующий вывод: