F # - Наборы
Набор в F # - это структура данных, которая действует как набор элементов без сохранения порядка, в котором элементы вставляются. Наборы не позволяют вставлять повторяющиеся записи в коллекцию.
Создание наборов
Наборы могут быть созданы следующими способами -
- Создав пустой набор с помощью Set.empty и добавив элементы с помощью функции добавления.
- Преобразование последовательностей и списков в наборы.
Следующая программа демонстрирует методы -
(* 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 → Установить <' T> → Установить <'T> | Возвращает новый набор с добавленным к нему элементом. Исключение не возникает, если набор уже содержит данный элемент. |
содержит: 'T → Set <' T> → bool | Оценивает true если данный элемент находится в данном наборе. |
count: Set <'T> → int | Возвращает количество элементов в наборе. |
разница: Установить <'T> → Установить <' T> → Установить <'T> | Возвращает новый набор, в котором элементы второго набора удалены из первого. |
пустой: Установить <'T> | Пустой набор для указанного типа. |
существует: ('T → bool) → Set <' T> → bool | Проверяет, удовлетворяет ли какой-либо элемент коллекции заданному предикату. Если входная функция является предикатом, а элементы - i0 ... iN, то эта функция вычисляет предикат i0 или ... или предикат iN. |
фильтр: ('T → bool) → Установить <' T> → Установить <'T> | Возвращает новую коллекцию, содержащую только элементы коллекции, для которой данный предикат возвращает true. |
свёртка: ('Состояние →' T → 'Состояние) →' Состояние → Установить <'T> →' Состояние | Применяет данную функцию накопления ко всем элементам набора. |
foldBack: ('T →' Состояние → 'Состояние) → Установить <' T> → 'Состояние →' Состояние | Применяет данную функцию накопления ко всем элементам набора. |
forall: ('T → bool) → Установить <' T> → bool | Проверяет, все ли элементы коллекции удовлетворяют заданному предикату. Если входная функция - p, а элементы - i0 ... iN, то эта функция вычисляет p i0 && ... && p iN. |
пересечение: Установить <'T> → Установить <' T> → Установить <'T> | Вычисляет пересечение двух наборов. |
IntercctMany: seq <Установить <'T >> → Установить <' T> | Вычисляет пересечение последовательности наборов. Последовательность не должна быть пустой. |
isEmpty: Set <'T> → bool | Возврат true если набор пуст. |
isProperSubset: Установить <'T> → Установить <' T> → bool | Оценивает true если все элементы первого набора находятся во втором, и хотя бы один элемент второго не находится в первом. |
isProperSuperset: Установить <'T> → Установить <' T> → bool | Оценивает true если все элементы второго набора находятся в первом, и хотя бы один элемент первого не находится во втором. |
isSubset: Set <'T> → Set <' T> → bool | Оценивает true если все элементы первого набора находятся во втором. |
isSuperset: Установить <'T> → Установить <' T> → bool | Оценивает true если все элементы второго набора находятся в первом. |
iter: ('T → единицы) → Установить <' T> → единицы | Применяет данную функцию к каждому элементу набора в порядке, соответствующем функции сравнения. |
карта: ('T →' U) → Установить <'T> → Установить <' U> | Возвращает новую коллекцию, содержащую результаты применения данной функции к каждому элементу входного набора. |
maxElement: Установить <'T> →' T | Возвращает самый высокий элемент в наборе в соответствии с порядком, используемым для набора. |
minElement: Установить <'T> →' T | Возвращает самый низкий элемент в наборе в соответствии с порядком, используемым для набора. |
ofArray: 'T массив → Установить <' T> | Создает набор, содержащий те же элементы, что и данный массив. |
ofList: 'T список → Установить <' T> | Создает набор, содержащий те же элементы, что и данный список. |
ofSeq: seq <'T> → Установить <' T> | Создает новую коллекцию из заданного перечислимого объекта. |
раздел: ('T → bool) → Установить <' T> → Установить <'T> * Установить <' T> | Разделяет набор на два набора, содержащих элементы, для которых данный предикат возвращает true и false соответственно. |
удалить: 'T → Установить <' T> → Установить <'T> | Возвращает новый набор с удаленным элементом. Исключение не возникает, если набор не содержит данный элемент. |
одиночный: 'T → Установить <' T> | Набор, содержащий данный элемент. |
toArray: Установить массив <'T> →' T | Создает массив, содержащий элементы набора по порядку. |
toList: Установить список <'T> →' T | Создает список, содержащий элементы набора по порядку. |
toSeq: установить <'T> → seq <' T> | Возвращает упорядоченное представление коллекции в виде перечислимого объекта. |
объединение: Set <'T> → Set <' T> → Set <'T> | Вычисляет объединение двух наборов. |
unionMany: seq <Установить <'T >> → Установить <' 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""
Когда вы компилируете и выполняете программу, она дает следующий результат:
Set a:
1 3 5 7 9 11 13 15 17 19
Set b:
1 4 7 10 13 16 19
Set c = set intersect of a and b :
1 7 13 19
Set d = set union of a and b :
1 3 4 5 7 9 10 11 13 15 16 17 19
Set e = set difference of a and b :
3 5 9 11 15 17