F# 컬렉션 타입
F# 컬렉션 타입
이 글을 살펴보면 어떤 상황에서 어떤 F# 컬렉션 타입이 가장 잘 맞는지 판단할 수 있어요. F# 컬렉션 타입은 System.Collections.Generic 네임스페이스에 있는 것들과 같은 .NET 컬렉션 타입과 달리, 객체 지향 관점이 아니라 함수형 프로그래밍 관점에서 설계되었어요. 특히 컬렉션 중에서도 array만 가변(mutable) 요소를 가진다는 점을 기억해 두세요. 그래서 컬렉션을 수정하면 원본을 바꾸는 대신, 수정된 컬렉션의 새 인스턴스가 만들어져요.
출처: https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/fsharp-collection-types
본문
컬렉션 타입 표
| 타입 | 설명 | 관련 링크 |
|---|---|---|
| List | 같은 타입의 요소들이 순서대로 늘어선, 변경 불가능한(immutable) 시리즈예요. 연결 리스트(linked list)로 구현되어 있어요. | List / Lists / List Module |
| Array | 고정 크기에 0부터 시작하는 인덱스를 쓰고, 모두 같은 타입인 연속된 데이터 요소로 이루어진 가변(mutable) 컬렉션이에요. | Array / Arrays / Array Module / Array2D Module / Array3D Module |
| seq | 모두 한 타입인 요소들의 논리적 시리즈예요. 시퀀스는 데이터가 크고 순서가 있는 컬렉션이지만 모든 요소를 꼭 사용할 필요가 없을 때 특히 유용해요. 개별 요소는 필요할 때만 계산되므로, 모든 요소를 다 쓰지 않는다면 시퀀스가 리스트보다 성능이 좋을 수 있어요. 시퀀스는 IEnumerable<T>의 별칭인 seq<'T> 타입으로 표현되며, 따라서 System.Collections.Generic.IEnumerable<'T>를 구현하는 .NET Framework 타입은 모두 시퀀스로 쓸 수 있어요. |
seq / Sequences / Seq Module |
| Map | 요소가 키(key)로 접근되는 변경 불가능한 딕셔너리예요. | Map / Map Module |
| Set | 이진 트리(binary tree)에 기반한 변경 불가능한 집합이에요. 비교는 F# 구조적 비교 함수를 사용하며, 이는 키 값에서 System.IComparable 인터페이스 구현을 잠재적으로 활용해요. |
Set / Set Module |
함수 표
아래 표는 함수와 컬렉션별 시간 복잡도, 그리고 설명을 정리한 거예요.
| 함수 | Array | List | Sequence | Map | Set | 설명 |
|---|---|---|---|---|---|---|
| append | 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) | - | - | 주어진 함수를 각 요소에 적용한 결과들의 평균을 돌려줘요. |
| blit | O(N) | - | - | - | - | 배열의 일부 구간을 복사해요. |
| cache | - | - | O(N) | - | - | 시퀀스의 요소를 계산해 저장해 둬요. |
| cast | - | - | O(N) | - | - | 요소들을 지정된 타입으로 변환해요. |
| choose | O(N) | O(N) | O(N) | - | - | 주어진 함수 f를 리스트의 각 요소 x에 적용해요. 함수가 Some(f(x))를 돌려주는 각 요소에 대한 결과를 담은 리스트를 돌려줘요. |
| collect | O(N) | O(N) | O(N) | - | - | 주어진 함수를 컬렉션의 각 요소에 적용하고, 그 결과들을 모두 이어 붙여 결합된 리스트를 돌려줘요. |
| compareWith | - | - | O(N) | - | - | 주어진 비교 함수를 사용해 두 시퀀스를 요소 단위로 비교해요. |
| concat | O(N) | O(N) | O(N) | - | - | 열거형들의 열거형(enumeration-of-enumerations)을 하나의 이어진 열거형으로 합쳐요. |
| contains | - | - | - | - | O(log(N)) | 집합이 지정된 요소를 포함하면 true를 돌려줘요. |
| containsKey | - | - | - | O(log(N)) | - | 요소가 맵의 도메인(키 영역)에 있는지 검사해요. |
| count | - | - | - | - | O(N) | 집합의 요소 개수를 돌려줘요. |
| countBy | - | - | O(N) | - | - | 키 생성 함수를 시퀀스의 각 요소에 적용하고, 고유한 키와 원래 시퀀스에서 그 키가 몇 번 등장했는지를 산출하는 시퀀스를 돌려줘요. |
| copy | O(N) | - | O(N) | - | - | 컬렉션을 복사해요. |
| create | O(N) | - | - | - | - | 처음부터 모두 주어진 값으로 채워진 전체 요소 배열을 만들어요. |
| delay | - | - | O(1) | - | - | 주어진 지연된 시퀀스 명세에서 만들어진 시퀀스를 돌려줘요. |
| difference | - | - | - | - | O(M*log(N)) | 첫 번째 집합에서 두 번째 집합의 요소들을 뺀 새 집합을 돌려줘요. |
| distinct | O(1)* | 요소에 대한 일반 해시·동등 비교를 기준으로 중복 항목이 없는 시퀀스를 돌려줘요. 요소가 시퀀스에 여러 번 나타나면, 이후에 나타나는 것들은 버려져요. | ||||
| distinctBy | O(1)* | 주어진 키 생성 함수가 돌려주는 키에 대한 일반 해시·동등 비교를 기준으로 중복 항목이 없는 시퀀스를 돌려줘요. 요소가 시퀀스에 여러 번 나타나면, 이후에 나타나는 것들은 버려져요. | ||||
| empty | O(1) | O(1) | O(1) | O(1) | O(1) | 빈 컬렉션을 만들어요. |
| exists | O(N) | O(N) | O(N) | O(log(N)) | O(log(N)) | 시퀀스의 어떤 요소라도 주어진 조건(predicate)을 만족하는지 검사해요. |
| exists2 | O(min(N,M)) | - | O(min(N,M)) | 두 입력 시퀀스의 대응하는 요소 쌍 중 어떤 것이라도 주어진 조건을 만족하는지 검사해요. | ||
| fill | O(N) | 배열의 요소 구간을 주어진 값으로 채워요. | ||||
| filter | 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을 발생시켜요. |
| fold | O(N) | O(N) | O(N) | O(N) | O(N) | 컬렉션의 각 요소에 함수를 적용하면서 계산을 통해 누적자(accumulator) 인자를 이어가요. 입력 함수가 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을 계산해요. |
| foldBack | O(N) | O(N) | - | O(N) | O(N) | 컬렉션의 각 요소에 함수를 적용하면서 누적자 인자를 이어가요. 입력 함수가 f이고 요소가 i0...iN이라면, f i0 (...(f iN s))을 계산해요. |
| 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) | - | - | - | 주어진 함수를 두 컬렉션의 대응 요소에 쌍으로 적용한 결과를 요소로 갖는 컬렉션을 만들고, 요소의 인덱스도 함께 전달해요. 두 입력 배열의 길이가 같아야 해요. |
| max | 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) | 주어진 시퀀스와 같은 요소를 담은 컬렉션을 만들어요. |
| pairwise | - | - | O(N) | - | - | 입력 시퀀스의 각 요소와 그 이전 요소의 쌍으로 이루어진 시퀀스를 돌려줘요. 다만 첫 번째 요소는 두 번째 요소의 이전 요소로서만 돌려줘요. |
| partition | O(N) | O(N) | - | O(N) | O(N) | 컬렉션을 두 개로 나눠요. 첫 번째 컬렉션은 주어진 조건이 true를 돌려주는 요소들을, 두 번째 컬렉션은 false를 돌려주는 요소들을 담아요. |
| permute | O(N) | O(N) | - | - | - | 지정된 순열(permutation)에 따라 모든 요소를 순열로 바꾼 배열을 돌려줘요. |
| pick | O(N) | O(N) | O(N) | O(log(N)) | - | 주어진 함수를 연속적인 요소에 적용해, 함수가 처음으로 Some을 돌려주는 결과를 반환해요. 함수가 절대 Some을 돌려주지 않으면 System.Collections.Generic.KeyNotFoundException이 발생해요. |
| randomChoice | O(1) | O(1) | O(1) | - | - | 주어진 컬렉션에서 무작위 요소 하나를 돌려줘요. |
| randomChoiceBy | O(1) | O(1) | O(1) | - | - | 지정된 난수 생성 함수로 주어진 컬렉션에서 무작위 요소 하나를 돌려줘요. |
| randomChoiceWith | O(1) | O(1) | O(1) | - | - | 지정된 Random 인스턴스로 주어진 컬렉션에서 무작위 요소 하나를 돌려줘요. |
| randomChoices | O(count) | O(count) | O(count) | - | - | 주어진 컬렉션에서 무작위 요소들의 컬렉션을 돌려줘요. 각 요소는 여러 번 선택될 수 있어요. |
| randomChoicesBy | O(count) | O(count) | O(count) | - | - | 지정된 난수 생성 함수로 주어진 컬렉션에서 무작위 요소들의 컬렉션을 돌려줘요. 각 요소는 여러 번 선택될 수 있어요. |
| randomChoicesWith | O(count) | O(count) | O(count) | - | - | 지정된 Random 인스턴스로 주어진 컬렉션에서 무작위 요소들의 컬렉션을 돌려줘요. 각 요소는 여러 번 선택될 수 있어요. |
| randomSample | O(count) | O(count) | O(count) | - | - | 주어진 컬렉션에서 요소들의 무작위 표본(sample)을 돌려줘요. 각 요소는 단 한 번만 선택될 수 있어요. |
| randomSampleBy | O(count) | O(count) | O(count) | - | - | 지정된 난수 생성 함수로 주어진 컬렉션에서 요소들의 무작위 표본을 돌려줘요. 각 요소는 단 한 번만 선택될 수 있어요. |
| randomSampleWith | O(count) | O(count) | O(count) | - | - | 지정된 Random 인스턴스로 주어진 컬렉션에서 요소들의 무작위 표본을 돌려줘요. 각 요소는 단 한 번만 선택될 수 있어요. |
| randomShuffle | O(N) | O(N) | O(N) | - | - | 무작위 순서로 뒤섞인 새 컬렉션을 돌려줘요. |
| randomShuffleBy | O(N) | O(N) | O(N) | - | - | 지정된 난수 생성 함수로 무작위 순서로 뒤섞인 새 컬렉션을 돌려줘요. |
| randomShuffleWith | O(N) | O(N) | O(N) | - | - | 지정된 Random 인스턴스로 무작위 순서로 뒤섞인 새 컬렉션을 돌려줘요. |
| randomShuffleInPlace | O(N) | - | - | - | - | 배열을 제자리(in-place)에서 변형해 무작위 순서로 정렬해요. |
| randomShuffleInPlaceBy | O(N) | - | - | - | - | 배열을 제자리에서 변형하며 지정된 난수 생성 함수를 사용해 무작위 순서로 정렬해요. |
| randomShuffleInPlaceWith | O(N) | - | - | - | - | 배열을 제자리에서 변형하며 지정된 Random 인스턴스로 무작위 순서로 정렬해요. |
| 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)) | 맵의 도메인에서 요소를 제거해요. 요소가 없어도 예외는 발생하지 않아요. |
| replicate | - | 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)) | - | - | 요소 값으로 컬렉션을 정렬해요. 요소는 compare를 사용해 비교돼요. |
| sortBy | O(N*log(N)) 평균 / O(N^2) 최악 | O(N*log(N)) | O(N*log(N)) | - | - | 주어진 프로젝션이 제공하는 키로 주어진 리스트를 정렬해요. 키는 compare를 사용해 비교돼요. |
| sortInPlace | O(N*log(N)) 평균 / O(N^2) 최악 | - | - | - | - | 제자리에서 변형하며 주어진 비교 함수를 사용해 배열 요소를 정렬해요. 요소는 compare로 비교돼요. |
| sortInPlaceBy | O(N*log(N)) 평균 / O(N^2) 최악 | - | - | - | - | 제자리에서 변형하며 주어진 프로젝션을 키로 사용해 배열 요소를 정렬해요. 요소는 compare로 비교돼요. |
| sortInPlaceWith | O(N*log(N)) 평균 / O(N^2) 최악 | - | - | - | - | 제자리에서 변형하며 주어진 비교 함수를 정렬 기준으로 사용해 배열 요소를 정렬해요. |
| sortWith | O(N*log(N)) 평균 / O(N^2) 최악 | O(N*log(N)) | - | - | - | 주어진 비교 함수를 정렬 기준으로 사용해 컬렉션 요소를 정렬하고 새 컬렉션을 돌려줘요. |
| sub | 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) | - | - | 삼중(triple)들의 리스트를 세 개의 리스트로 나눠요. |
| windowed | - | - | O(N) | - | - | 입력 시퀀스에서 끌어온 요소들을 담은 슬라이딩 윈도우를 산출하는 시퀀스를 돌려줘요. 각 윈도우는 새로운 배열로 돌려줘요. |
| zip | O(N) | O(N) | O(N) | - | - | 두 컬렉션을 쌍들의 리스트로 결합해요. 두 리스트의 길이가 같아야 해요. |
| zip3 | O(N) | O(N) | O(N) | - | - | 세 컬렉션을 삼중들의 리스트로 결합해요. 리스트들의 길이가 같아야 해요. |