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