F# 컬렉션 형식

이 항목을 검토하여 특정 요구 사항에 가장 적합한 F# 컬렉션 유형을 확인할 수 있습니다. 이러한 컬렉션 형식은 .NET의 컬렉션 형식(예: System.Collections.Generic 네임스페이스의 컬렉션 형식)과 다릅니다. F# 컬렉션 형식은 개체 지향 큐브 뷰가 아닌 기능 프로그래밍 관점에서 디자인된다는 점에서 다릅니다. 특히 배열 컬렉션에만 변경 가능한 요소가 있습니다. 따라서 컬렉션을 수정할 때 원래 컬렉션을 변경하는 대신 수정된 컬렉션의 인스턴스를 만듭니다.

컬렉션 형식은 개체가 저장되는 데이터 구조의 형식도 다릅니다. 해시 테이블, 연결된 목록 및 배열과 같은 데이터 구조는 성능 특성이 다르고 사용 가능한 작업 집합이 다릅니다.

컬렉션 형식 테이블

다음 표에서는 F# 컬렉션 형식을 보여줍니다.

Type 설명 관련 링크
목록 동일한 형식의 순서가 지정되고 변경할 수 없는 요소 시리즈입니다. 연결된 목록으로 구현됩니다. 목록

모듈 나열
Array 모두 동일한 형식인 연속 데이터 요소의 고정 크기, 0부터 시작하는 변경 가능한 컬렉션입니다. 배열

배열 모듈

Array2D 모듈

Array3D 모듈
seq 모두 하나의 형식인 요소의 논리적 계열입니다. 시퀀스는 정렬된 큰 데이터 컬렉션이 있지만 모든 요소를 반드시 사용할 필요는 없는 경우에 특히 유용합니다. 개별 시퀀스 요소는 필요에 따라 계산되므로 모든 요소가 사용되지 않는 경우 시퀀스가 목록보다 더 잘 수행될 수 있습니다. 시퀀스는 형식으로 seq<'T> 표현되며, 이는 에 대한 IEnumerable<T>별칭입니다. 따라서 구현하는 모든 .NET Framework 형식을 System.Collections.Generic.IEnumerable<'T> 시퀀스로 사용할 수 있습니다. 시퀀스

Seq 모듈
Map 변경할 수 없는 요소 사전입니다. 요소는 키로 액세스됩니다. 맵 모듈
설정 이진 트리를 기반으로 하는 변경할 수 없는 집합입니다. 여기서 비교는 키 값에 인터페이스의 System.IComparable 구현을 사용할 수 있는 F# 구조 비교 함수입니다. 모듈 설정

함수 테이블

이 섹션에서는 F# 컬렉션 형식에서 사용할 수 있는 함수를 비교합니다. 함수의 계산 복잡성이 지정됩니다. 여기서 N은 첫 번째 컬렉션의 크기이고 M은 두 번째 컬렉션의 크기(있는 경우)입니다. 대시(-)는 컬렉션에서 이 함수를 사용할 수 없음을 나타냅니다. 시퀀스는 지연 계산되므로 열거 시 시퀀스의 성능에 영향을 주지만 즉시 반환되기 때문에 O(1)와 같은 Seq.distinct 함수가 될 수 있습니다.

함수 Array List Sequence 지도 설정 설명
추가 O(N) O(N) O(N) - - 첫 번째 컬렉션의 요소와 두 번째 컬렉션의 요소가 포함된 새 컬렉션을 반환합니다.
add - - - O(log(N)) O(log(N)) 요소가 추가된 새 컬렉션을 반환합니다.
average O(N) O(N) O(N) - - 컬렉션에 있는 요소의 평균을 반환합니다.
averageBy O(N) O(N) O(N) - - 각 요소에 적용된 제공된 함수 결과의 평균을 반환합니다.
블릿 (블릿) O(N) - - - - 배열의 섹션을 복사합니다.
캐시 - - O(N) - - 시퀀스의 요소를 계산하고 저장합니다.
cast - - O(N) - - 요소를 지정된 형식으로 변환합니다.
choose O(N) O(N) O(N) - - 목록의 각 요소 x 에 지정된 함수 f 를 적용합니다. 함수가 반환하는 각 요소에 대한 결과가 들어 있는 목록을 반환합니다 Some(f(x)).
collect O(N) O(N) O(N) - - 지정된 함수를 컬렉션의 각 요소에 적용하고, 모든 결과를 연결하고, 결합된 목록을 반환합니다.
compareWith - - O(N) - - 요소별로 지정된 비교 함수를 사용하여 두 시퀀스를 비교합니다.
concat O(N) O(N) O(N) - - 지정된 열거형을 연결된 단일 열거형으로 결합합니다.
contains - - - - O(log(N)) 지정된 요소가 집합에 포함되어 있으면 true를 반환합니다.
containsKey - - - O(log(N)) - 요소가 지도의 do기본 있는지 여부를 테스트합니다.
count - - - - O(N) 집합에 있는 요소 수를 반환합니다.
countBy - - O(N) - - 키 생성 함수를 시퀀스의 각 요소에 적용하고 고유 키와 원래 시퀀스의 발생 횟수를 생성하는 시퀀스를 반환합니다.
copy O(N) - O(N) - - 컬렉션을 복사합니다.
만들기 O(N) - - - - 처음에 지정된 모든 값인 전체 요소의 배열을 만듭니다.
연기 - - O(1) - - 시퀀스의 지정된 지연된 사양에서 빌드된 시퀀스를 반환합니다.
차이점 - - - - O(M*log(N)) 첫 번째 집합에서 제거된 두 번째 집합의 요소가 있는 새 집합을 반환합니다.
distinct O(1)* 항목의 제네릭 해시 및 같음 비교에 따라 중복 항목이 없는 시퀀스를 반환합니다. 시퀀스에서 요소가 여러 번 발생하는 경우 이후 항목은 dis카드ed입니다.
distinctBy O(1)* 지정된 키 생성 함수가 반환하는 키에 대한 제네릭 해시 및 같음 비교에 따라 중복 항목이 없는 시퀀스를 반환합니다. 시퀀스에서 요소가 여러 번 발생하는 경우 이후 항목은 dis카드ed입니다.
empty O(1) O(1) O(1) O(1) O(1) 빈 컬렉션을 만듭니다.
O(N) O(N) O(N) O(log(N)) O(log(N)) 시퀀스의 요소가 지정된 조건자를 충족하는지 여부를 테스트합니다.
exists2 O(min(N,M)) - O(min(N,M)) 입력 시퀀스의 해당 요소 쌍이 지정된 조건자를 충족하는지 여부를 테스트합니다.
fill O(N) 배열의 요소 범위를 지정된 값으로 설정합니다.
필터링 O(N) O(N) O(N) O(N) O(N) 지정된 조건자가 반환하는 컬렉션의 요소만 포함하는 새 컬렉션을 반환합니다 true.
find O(N) O(N) O(N) O(log(N)) - 지정된 함수가 반환하는 첫 번째 요소를 반환합니다 true. 이러한 요소가 없으면 반환 System.Collections.Generic.KeyNotFoundException 합니다.
findIndex O(N) O(N) O(N) - - 지정된 조건자를 충족하는 배열의 첫 번째 요소 인덱스를 반환합니다. 조건자를 System.Collections.Generic.KeyNotFoundException 충족하는 요소가 없으면 발생합니다.
findKey - - - O(log(N)) - 컬렉션의 각 매핑에 대한 함수를 평가하고 함수가 반환하는 첫 번째 매핑에 대한 키를 반환합니다 true. 이러한 요소가 없으면 이 함수가 발생합니다 System.Collections.Generic.KeyNotFoundException.
접어 O(N) O(N) O(N) O(N) O(N) 계산을 통해 누적기 인수를 스레딩하여 컬렉션의 각 요소에 함수를 적용합니다. 입력 함수가 f이고 요소가 i0인 경우... iN, 이 함수는 f(... (f s i0)...) iN.
fold2 O(N) O(N) - - - 계산을 통해 누적기 인수를 스레딩하여 두 컬렉션의 해당 요소에 함수를 적용합니다. 컬렉션의 크기는 동일해야 합니다. 입력 함수가 f이고 요소가 i0인 경우... iN 및 j0... jN, 이 함수는 f(... (f s i0 j0)...) iN jN.
폴드 백 O(N) O(N) - O(N) O(N) 계산을 통해 누적기 인수를 스레딩하여 컬렉션의 각 요소에 함수를 적용합니다. 입력 함수가 f이고 요소가 i0인 경우... iN, 이 함수는 f i0(... (f iNs).
foldBack2 O(N) O(N) - - - 계산을 통해 누적기 인수를 스레딩하여 두 컬렉션의 해당 요소에 함수를 적용합니다. 컬렉션의 크기는 동일해야 합니다. 입력 함수가 f이고 요소가 i0인 경우... iN 및 j0... jN, 이 함수는 f i0 j0(... (f iN jN s).
Forall O(N) O(N) O(N) O(N) O(N) 컬렉션의 모든 요소가 지정된 조건자를 충족하는지 여부를 테스트합니다.
forall2 O(N) O(N) O(N) - - 컬렉션의 모든 해당 요소가 지정된 조건자를 쌍으로 충족하는지 테스트합니다.
get / nth O(1) O(N) O(N) - - 인덱스가 지정된 컬렉션의 요소를 반환합니다.
head - O(1) O(1) - - 컬렉션의 첫 번째 요소를 반환합니다.
init O(N) O(N) O(1) - - 요소를 계산하는 차원 및 생성기 함수가 지정된 컬렉션을 만듭니다.
initInfinite - - O(1) - - 반복될 때 지정된 함수를 호출하여 연속 요소를 반환하는 시퀀스를 생성합니다.
intersect - - - - O(log(N)*log(M)) 두 집합의 교집합을 계산합니다.
intersectMany - - - - O(N1*N2...) 집합 시퀀스의 교집합을 계산합니다. 시퀀스는 비어 있지 않아야 합니다.
IsEmpty O(1) O(1) O(1) O(1) - 컬렉션이 비어 있으면 반환 true 합니다.
isProperSubset - - - - O(M*log(N)) 첫 번째 집합의 모든 요소가 두 번째 집합에 있고 두 번째 집합의 하나 이상의 요소가 첫 번째 집합에 없는 경우를 반환 true 합니다.
isProperSuperset - - - - O(M*log(N)) 두 번째 집합의 모든 요소가 첫 번째 집합에 있고 첫 번째 집합의 요소가 두 번째 집합에 없는 경우를 반환 true 합니다.
isSubset - - - - O(M*log(N)) 첫 번째 집합의 모든 요소가 두 번째 집합에 있는지를 반환 true 합니다.
isSuperset - - - - O(M*log(N)) 두 번째 집합의 모든 요소가 첫 번째 집합에 있는지를 반환 true 합니다.
Iter O(N) O(N) O(N) O(N) O(N) 지정된 함수를 컬렉션의 각 요소에 적용합니다.
iteri O(N) O(N) O(N) - - 지정된 함수를 컬렉션의 각 요소에 적용합니다. 함수에 전달되는 정수는 요소의 인덱스입니다.
iteri2 O(N) O(N) - - - 지정된 함수를 두 배열의 일치하는 인덱스에서 가져온 요소 쌍에 적용합니다. 함수에 전달되는 정수는 요소의 인덱스입니다. 두 배열의 길이는 같아야 합니다.
iter2 O(N) O(N) O(N) - - 지정된 함수를 두 배열의 일치하는 인덱스에서 가져온 요소 쌍에 적용합니다. 두 배열의 길이는 같아야 합니다.
last O(1) O(N) O(N) - - 해당 컬렉션의 마지막 항목을 반환합니다.
length O(1) O(N) O(N) - - 컬렉션의 요소 수를 반환합니다.
map O(N) O(N) O(1) - - 해당 요소가 배열의 각 요소에 지정된 함수를 적용한 결과인 컬렉션을 빌드합니다.
map2 O(N) O(N) O(1) - - 해당 요소가 지정된 함수를 두 컬렉션의 해당 요소에 쌍으로 적용한 결과인 컬렉션을 빌드합니다. 두 입력 배열의 길이는 같아야 합니다.
map3 - O(N) - - - 해당 요소가 세 컬렉션의 해당 요소에 지정된 함수를 동시에 적용한 결과인 컬렉션을 빌드합니다.
Mapi O(N) O(N) O(N) - - 해당 요소가 배열의 각 요소에 지정된 함수를 적용한 결과인 배열을 빌드합니다. 함수에 전달되는 정수 인덱스가 변환되는 요소의 인덱스임을 나타냅니다.
mapi2 O(N) O(N) - - - 해당 요소가 지정된 함수를 두 컬렉션의 해당 요소에 쌍으로 적용한 결과인 컬렉션을 빌드하고 요소의 인덱스도 전달합니다. 두 입력 배열의 길이는 같아야 합니다.
최대 O(N) O(N) O(N) - - max 연산자를 사용하여 비교하여 컬렉션에서 가장 큰 요소를 반환합니다.
maxBy O(N) O(N) O(N) - - 함수 결과에 max를 사용하여 비교하여 컬렉션에서 가장 큰 요소를 반환합니다.
maxElement - - - - O(log(N)) 집합에 사용되는 순서에 따라 집합에서 가장 큰 요소를 반환합니다.
min O(N) O(N) O(N) - - min 연산자를 사용하여 비교하여 컬렉션에서 최소 요소를 반환합니다.
minBy O(N) O(N) O(N) - - 함수 결과에 min 연산자를 사용하는 것과 비교하여 컬렉션에서 최소 요소를 반환합니다.
minElement - - - - O(log(N)) 집합에 사용되는 순서에 따라 집합에서 가장 낮은 요소를 반환합니다.
ofArray - O(N) O(1) O(N) O(N) 지정된 배열과 동일한 요소를 포함하는 컬렉션을 만듭니다.
ofList O(N) - O(1) O(N) O(N) 지정된 목록과 동일한 요소를 포함하는 컬렉션을 만듭니다.
ofSeq O(N) O(N) - O(N) O(N) 지정된 시퀀스와 동일한 요소를 포함하는 컬렉션을 만듭니다.
쌍으로 - - O(N) - - 두 번째 요소의 선행 작업으로만 반환되는 첫 번째 요소를 제외하고 입력 시퀀스와 해당 선행 작업의 각 요소 시퀀스를 반환합니다.
파티션 O(N) O(N) - O(N) O(N) 컬렉션을 두 개의 컬렉션으로 분할합니다. 첫 번째 컬렉션에는 지정된 조건자가 반환 true하는 요소가 포함되고 두 번째 컬렉션에는 지정된 조건자가 반환하는 요소가 포함됩니다 false.
permute O(N) O(N) - - - 지정된 순열에 따라 모든 요소가 순열된 배열을 반환합니다.
선택 O(N) O(N) O(N) O(log(N)) - 지정된 함수를 연속 요소에 적용하고 함수가 Some를 반환하는 첫 번째 결과를 반환합니다. 함수가 Some System.Collections.Generic.KeyNotFoundException 를 반환하지 않으면 발생합니다.
readonly - - O(N) - - 지정된 시퀀스 개체에 위임하는 시퀀스 개체를 만듭니다. 이 작업을 수행하면 형식 캐스트가 원래 시퀀스를 다시 검색하고 변경할 수 없습니다. 예를 들어 배열이 지정된 경우 반환된 시퀀스는 배열의 요소를 반환하지만 반환된 시퀀스 개체를 배열로 캐스팅할 수는 없습니다.
reduce O(N) O(N) O(N) - - 계산을 통해 누적기 인수를 스레딩하여 컬렉션의 각 요소에 함수를 적용합니다. 이 함수는 처음 두 요소에 함수를 적용하여 시작하고 세 번째 요소와 함께 이 결과를 함수에 전달합니다. 함수는 최종 결과를 반환합니다.
reduceBack O(N) O(N) - - - 계산을 통해 누적기 인수를 스레딩하여 컬렉션의 각 요소에 함수를 적용합니다. 입력 함수가 f이고 요소가 i0인 경우... iN, 이 함수는 f i0(... (f iN-1 iN).
remove - - - O(log(N)) O(log(N)) 지도의 do기본 요소를 제거합니다. 요소가 없으면 예외가 발생하지 않습니다.
복제본(replica)te - O(N) - - - 모든 요소가 지정된 값으로 설정된 지정된 길이의 목록을 만듭니다.
rev O(N) O(N) - - - 요소를 역순으로 사용하여 새 목록을 반환합니다.
scan O(N) O(N) O(N) - - 계산을 통해 누적기 인수를 스레딩하여 컬렉션의 각 요소에 함수를 적용합니다. 이 작업은 함수를 목록의 두 번째 인수 및 첫 번째 요소에 적용합니다. 그런 다음 이 결과를 두 번째 요소와 함께 함수에 전달합니다. 마지막으로, 이 작업은 중간 결과 목록과 최종 결과를 반환합니다.
scanBack O(N) O(N) - - - foldBack 작업과 비슷하지만 중간 결과와 최종 결과를 모두 반환합니다.
singleton - - O(1) - O(1) 하나의 항목만 생성하는 시퀀스를 반환합니다.
set O(1) - - - - 배열의 요소를 지정된 값으로 설정합니다.
skip - - O(N) - - 기본 시퀀스의 N 요소를 건너뛰고 시퀀스의 재기본 요소를 생성하는 시퀀스를 반환합니다.
skipWhile - - O(N) - - 지정된 조건자가 반환되는 동안 기본 시퀀스의 요소를 건너뛰고 시퀀스의 다시 기본 요소를 생성하는 시퀀스를 반환 true 합니다.
sort O(N*log(N)) 평균

O(N^2) 최악의 경우
O(N*log(N)) O(N*log(N)) - - 요소 값을 기준으로 컬렉션을 정렬합니다. 요소는 비교를 사용하여 비교됩니다.
sortBy O(N*log(N)) 평균

O(N^2) 최악의 경우
O(N*log(N)) O(N*log(N)) - - 지정된 프로젝션에서 제공하는 키를 사용하여 지정된 목록을 정렬합니다. 비교를 사용하여 키를 비교합니다.
sortInPlace O(N*log(N)) 평균

O(N^2) 최악의 경우
- - - - 배열 요소를 현재 위치에서 변경하고 지정된 비교 함수를 사용하여 배열의 요소를 정렬합니다. 요소는 비교를 사용하여 비교됩니다.
sortInPlaceBy O(N*log(N)) 평균

O(N^2) 최악의 경우
- - - - 배열 요소를 현재 위치에서 변경하고 키에 대해 지정된 프로젝션을 사용하여 배열의 요소를 정렬합니다. 요소는 비교를 사용하여 비교됩니다.
sortInPlaceWith O(N*log(N)) 평균

O(N^2) 최악의 경우
- - - - 배열 요소를 현재 위치에서 변경하고 지정된 비교 함수를 순서로 사용하여 배열의 요소를 정렬합니다.
sortWith O(N*log(N)) 평균

O(N^2) 최악의 경우
O(N*log(N)) - - - 지정된 비교 함수를 순서로 사용하고 새 컬렉션을 반환하여 컬렉션의 요소를 정렬합니다.
하위 O(N) - - - - 인덱스 및 길이를 시작하여 지정된 하위 범위가 포함된 배열을 빌드합니다.
sum O(N) O(N) O(N) - - 컬렉션에 있는 요소의 합계를 반환합니다.
sumBy O(N) O(N) O(N) - - 컬렉션의 각 요소에 함수를 적용하여 생성된 결과의 합계를 반환합니다.
tail - O(1) - - - 첫 번째 요소 없이 목록을 반환합니다.
take - - O(N) - - 시퀀스의 요소를 지정된 개수까지 반환합니다.
takeWhile - - O(1) - - 지정된 조건자가 반환된 후 더 이상 요소를 반환하지 않는 동안 반복될 때 기본 시퀀스의 요소를 생성하는 시퀀스를 반환 true 합니다.
Toarray - O(N) O(N) O(N) O(N) 지정된 컬렉션에서 배열을 만듭니다.
Tolist O(N) - O(N) O(N) O(N) 지정된 컬렉션에서 목록을 만듭니다.
toSeq O(1) O(1) - O(1) O(1) 지정된 컬렉션에서 시퀀스를 만듭니다.
truncate - - O(1) - - 열거될 때 N개 이하의 요소를 반환하는 시퀀스를 반환합니다.
tryFind O(N) O(N) O(N) O(log(N)) - 지정된 조건자를 충족하는 요소를 검색합니다.
tryFindIndex O(N) O(N) O(N) - - 지정된 조건자를 충족하는 첫 번째 요소를 검색하고 일치하는 요소의 인덱스를 반환하거나 None 이러한 요소가 없는 경우 반환합니다.
tryFindKey - - - O(log(N)) - 지정된 조건자를 충족하는 컬렉션의 첫 번째 매핑 키를 반환하거나 이러한 요소가 없는 경우 반환 None 합니다.
tryPick O(N) O(N) O(N) O(log(N)) - 지정된 함수를 연속 요소에 적용하여 함수가 일부 값에 대해 반환하는 첫 번째 결과를 반환 Some 합니다. 이러한 요소가 없으면 작업이 반환됩니다 None.
unfold - - O(N) - - 지정된 계산에서 생성하는 요소가 포함된 시퀀스를 반환합니다.
union - - - - O(M*log(N)) 두 집합의 합을 계산합니다.
unionMany - - - - O(N1*N2...) 집합 시퀀스의 합합을 계산합니다.
unzip O(N) O(N) O(N) - - 쌍 목록을 두 개의 목록으로 분할합니다.
unzip3 O(N) O(N) O(N) - - 세 개의 목록으로 세 개의 목록을 분할합니다.
- - O(N) - - 입력 시퀀스에서 가져온 요소가 포함된 슬라이딩 윈도우를 생성하는 시퀀스를 반환합니다. 각 창은 새 배열로 반환됩니다.
zip O(N) O(N) O(N) - - 두 컬렉션을 쌍 목록으로 결합합니다. 두 목록은 길이가 같아야 합니다.
zip3 O(N) O(N) O(N) - - 세 컬렉션을 삼중 목록으로 결합합니다. 목록은 길이가 같아야 합니다.

참고 항목