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) | - | - | 세 컬렉션을 삼중 목록으로 결합합니다. 목록은 길이가 같아야 합니다. |
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET