F #-세트
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 주어진 요소가 주어진 세트에있는 경우. |
개수 : Set < 'T> → int | 집합의 요소 수를 반환합니다. |
차이 : Set < 'T> → Set <'T> → Set < 'T> | 두 번째 집합의 요소가 첫 번째 집합에서 제거 된 새 집합을 반환합니다. |
비어 있음 : 설정 < 'T> | 지정된 유형에 대한 빈 세트입니다. |
존재 : ( 'T → bool) → Set <'T> → bool | 컬렉션의 요소가 주어진 조건자를 충족하는지 테스트합니다. 입력 함수가 술어이고 요소가 i0 ... iN이면이 함수는 술어 i0 또는 ... 또는 술어 iN을 계산합니다. |
필터 : ( 'T → bool) → Set <'T> → Set < 'T> | 주어진 술어가 리턴하는 콜렉션의 요소 만 포함하는 새 콜렉션을 리턴합니다. true. |
fold : ( 'State →'T → 'State) →'State → Set < 'T> →'State | 주어진 누적 함수를 세트의 모든 요소에 적용합니다. |
foldBack : ( 'T →'상태 → '상태) → 설정 <'T> → '상태 →'상태 | 주어진 누적 함수를 세트의 모든 요소에 적용합니다. |
forall : ( 'T → bool) → Set <'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 → 단위) → Set <'T> → 단위 | 비교 함수에 따라 순서대로 집합의 각 요소에 주어진 함수를 적용합니다. |
맵 : ( 'T →'U) → Set < 'T> → Set <'U> | 입력 집합의 각 요소에 지정된 함수를 적용한 결과가 포함 된 새 컬렉션을 반환합니다. |
maxElement : Set < 'T> →'T | 집합에 사용되는 순서에 따라 집합에서 가장 높은 요소를 반환합니다. |
minElement : Set < 'T> →'T | 집합에 사용되는 순서에 따라 집합에서 가장 낮은 요소를 반환합니다. |
ofArray : 'T 배열 → Set <'T> | 주어진 배열과 동일한 요소를 포함하는 집합을 만듭니다. |
ofList : 'T리스트 → Set <'T> | 주어진 목록과 동일한 요소를 포함하는 집합을 만듭니다. |
ofSeq : seq < 'T> → Set <'T> | 지정된 열거 가능한 개체에서 새 컬렉션을 만듭니다. |
파티션 : ( 'T → bool) → Set <'T> → Set < 'T> * Set <'T> | 주어진 술어가 각각 true 및 false를 리턴하는 요소를 포함하는 두 세트로 세트를 분할합니다. |
제거 : 'T → 설정 <'T> → 설정 < 'T> | 지정된 요소가 제거 된 새 집합을 반환합니다. 세트에 주어진 요소가 포함되어 있지 않으면 예외가 발생하지 않습니다. |
싱글 톤 : 'T → Set <'T> | 주어진 요소를 포함하는 집합입니다. |
toArray : Set < 'T> →'T 배열 | 집합의 요소를 순서대로 포함하는 배열을 만듭니다. |
toList : Set < 'T> →'T리스트 | 집합의 요소를 순서대로 포함하는 목록을 만듭니다. |
toSeq : Set < 'T> → seq <'T> | 컬렉션의 정렬 된 뷰를 열거 가능한 개체로 반환합니다. |
union : 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""
프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.
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