F# のコレクション型
このトピックを確認すると、特定のニーズに最も適した F# コレクションの種類を判断できます。 これらのコレクション型は、F# コレクション型がオブジェクト指向の観点ではなく関数型プログラミングの観点から設計されている点で、System.Collections.Generic
名前空間のコレクション型など、.NET のコレクション型とは異なります。 具体的には、変更可能な要素を持つのは配列コレクションだけです。 したがって、コレクションを変更する場合は、元のコレクションを変更するのではなく、変更されたコレクションのインスタンスを作成します。
コレクション型は、オブジェクトが格納されるデータ構造の型も異なります。 ハッシュ テーブル、リンク リスト、配列などのデータ構造には、パフォーマンス特性が異なり、使用可能な操作のセットも異なります。
コレクションタイプの一覧表
次の表は、F# コレクション型を示しています。
種類 | 説明 | 関連リンク |
---|---|---|
リスト | 同じ型の順序付けされた変更できない一連の要素。 リンク リストとして実装されます。 | リスト リスト モジュール |
配列 | すべて同じ型の連続するデータ要素の固定サイズの 0 から始まる変更可能なコレクション。 | 配列 配列モジュール Array2D モジュール Array3D モジュール |
seq | 同じ型の要素からなる論理的な系列。 シーケンスは、データの大きな順序付けされたコレクションがあるが、必ずしもすべての要素を使用するとは限らない場合に特に便利です。 個々のシーケンス要素は必要に応じてのみ計算されるため、すべての要素が使用されていない場合、シーケンスはリストよりも優れたパフォーマンスを発揮できます。 シーケンスは、IEnumerable<T> のエイリアスである seq<'T> 型で表されます。 そのため、System.Collections.Generic.IEnumerable<'T> を実装するすべての .NET Framework 型をシーケンスとして使用できます。 |
シーケンス Seq モジュール |
マップ | 要素の変更できないディクショナリ。 要素はキーによってアクセスされます。 | マップ モジュール |
セット | バイナリ ツリーに基づく不変のセット。比較は F# 構造比較関数であり、キー値に対して System.IComparable インターフェイスの実装が使用される可能性があります。 |
モジュール の設定 |
関数の表
このセクションでは、F# コレクション型で使用できる関数を比較します。 関数の計算の複雑さが与えられます。N は最初のコレクションのサイズ、M は 2 番目のコレクションのサイズ (ある場合) です。 ダッシュ (-) は、この関数がコレクションで使用できないことを示します。 シーケンスは遅延評価されるため、Seq.distinct
などの関数は直ちに返されるため O(1) になる場合がありますが、列挙してもシーケンスのパフォーマンスに影響します。
機能 | 配列 | 一覧 | 順序 | 地図 | オン | 説明 |
---|---|---|---|---|---|---|
append | O(N) | O(N) | O(N) | - | - | 最初のコレクションの要素とそれに続く 2 番目のコレクションの要素を含む新しいコレクションを返します。 |
add | - | - | - | O(log(N)) | O(log(N)) | 要素が追加された新しいコレクションを返します。 |
average | O(N) | O(N) | O(N) | - | - | コレクション内の要素の平均を返します。 |
averageBy | O(N) | O(N) | O(N) | - | - | 各要素に適用された指定された関数の結果の平均を返します。 |
blit | O(N) | - | - | - | - | 配列のセクションをコピーします。 |
キャッシュ | - | - | O(N) | - | - | シーケンスの要素を計算して格納します。 |
キャスト | - | - | O(N) | - | - | 要素を指定した型に変換します。 |
choose | O(N) | O(N) | O(N) | - | - | 指定された関数 f をリストの各要素 x に適用します。 関数が Some(f(x)) を返す各要素の結果を含むリストを返します。 |
collect | O(N) | O(N) | O(N) | - | - | 指定した関数をコレクションの各要素に適用し、すべての結果を連結して、結合されたリストを返します。 |
compareWith | - | - | O(N) | - | - | 指定された比較関数を使用して、要素ごとに 2 つのシーケンスを比較します。 |
concat | O(N) | O(N) | O(N) | - | - | 指定された列挙型を 1 つの連結された列挙体として結合します。 |
contains | - | - | - | - | O(log(N)) | セットに指定した要素が含まれている場合は true を返します。 |
containsKey | - | - | - | O(log(N)) | - | 要素がマップのドメイン内にあるかどうかをテストします。 |
件数 | - | - | - | - | O(N) | セット内の要素の数を返します。 |
countBy | - | - | O(N) | - | - | キー生成関数をシーケンスの各要素に適用し、一意のキーとその元のシーケンス内の出現回数を生成するシーケンスを返します。 |
copy | O(N) | - | O(N) | - | - | コレクションをコピーします。 |
創造する | O(N) | - | - | - | - | 最初はすべて指定された値である要素全体の配列を作成します。 |
遅延 | - | - | O(1) | - | - | シーケンスの指定された遅延仕様から構築されたシーケンスを返します。 |
違い | - | - | - | - | O(M*log(N)) | 2 番目のセットの要素が最初のセットから削除された新しいセットを返します。 |
distinct | O(1)* | エントリのジェネリック ハッシュと等値比較に従って、重複するエントリを含まないシーケンスを返します。 シーケンス内で要素が複数回発生した場合、後で発生した要素は破棄されます。 | ||||
distinctBy | O(1)* | 指定されたキー生成関数が返すキーのジェネリック ハッシュと等価比較に従って、重複するエントリを含まないシーケンスを返します。 シーケンス内で要素が複数回発生した場合、後で発生した要素は破棄されます。 | ||||
空 | O(1) | O(1) | O(1) | O(1) | O(1) | 空のコレクションを作成します。 |
exists | 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 を発生させます。 |
キーを見つける | - | - | - | O(log(N)) | - | コレクション内の各マッピングで関数を評価し、関数が true を返す最初のマッピングのキーを返します。 そのような要素が存在しない場合、この関数は System.Collections.Generic.KeyNotFoundException を発生させます。 |
fold | O(N) | O(N) | O(N) | O(N) | O(N) | コレクションの各要素に関数を適用し、計算を通じてアキュムレータ引数をスレッド化します。 入力関数が f で、要素が i0 から iN まである場合、この関数は f (... (f s i0)...) iN を計算します。 |
fold2 | O(N) | O(N) | - | - | - | 2 つのコレクションの対応する要素に関数を適用し、計算を通じてアキュムレータ引数をスレッド化します。 コレクションのサイズは同じである必要があります。 入力関数が 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) | - | - | - | 2 つのコレクションの対応する要素に関数を適用し、計算を通じてアキュムレータ引数をスレッド化します。 コレクションのサイズは同じである必要があります。 入力された関数が 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)) | 2 つのセットの積集合を計算します。 |
intersectMany | - | - | - | - | O(N1*N2...) | セットのシーケンスの積集合を計算します。 シーケンスを空にすることはできません。 |
isEmpty | O(1) | O(1) | O(1) | O(1) | - | コレクションが空の場合は true を返します。 |
isProperSubset | - | - | - | - | O(M*log(N)) | 最初のセットのすべての要素が 2 番目のセットにあり、2 番目のセットの少なくとも 1 つの要素が最初のセットにない場合は、true を返します。 |
isProperSuperset | - | - | - | - | O(M*log(N)) | 2 番目のセットのすべての要素が最初のセットにあり、最初のセットの少なくとも 1 つの要素が 2 番目のセットにない場合は、true を返します。 |
isSubset | - | - | - | - | O(M*log(N)) | 最初のセットのすべての要素が 2 番目のセットにある場合は、true を返します。 |
isSuperset | - | - | - | - | O(M*log(N)) | 2 番目のセットのすべての要素が最初のセットにある場合は、true を返します。 |
iter | O(N) | O(N) | O(N) | O(N) | O(N) | 指定された関数をコレクションの各要素に適用します。 |
iteri | O(N) | O(N) | O(N) | - | - | 指定された関数をコレクションの各要素に適用します。 関数に渡される整数は、要素のインデックスを示します。 |
iteri2 | O(N) | O(N) | - | - | - | 指定された関数を、2 つの配列内の一致するインデックスから描画される要素のペアに適用します。 関数に渡される整数は、要素のインデックスを示します。 2 つの配列の長さは同じである必要があります。 |
iter2 | O(N) | O(N) | O(N) | - | - | 指定された関数を、2 つの配列内の一致するインデックスから描画される要素のペアに適用します。 2 つの配列の長さは同じである必要があります。 |
last | O(1) | O(N) | O(N) | - | - | 該当するコレクション内の最後の項目を返します。 |
length | O(1) | O(N) | O(N) | - | - | コレクション内の要素の数を返します。 |
地図 | O(N) | O(N) | O(1) | - | - | 指定された関数を配列の各要素に適用した結果を要素とするコレクションを構築します。 |
map2 | O(N) | O(N) | O(1) | - | - | 2 つのコレクションの対応する要素に対して指定された関数を適用した結果を要素とするコレクションを構築します。 2 つの入力配列の長さは同じである必要があります。 |
map3 | - | O(N) | - | - | - | 指定された関数を 3 つのコレクションの対応する要素に同時に適用した結果を要素とするコレクションをビルドします。 |
mapi | O(N) | O(N) | O(N) | - | - | 指定された関数を配列の各要素に適用した結果を要素とする配列を構築します。 関数に渡される整数インデックスは、変換される要素のインデックスを示します。 |
mapi2 | O(N) | O(N) | - | - | - | 2 つのコレクションの対応する要素に対して指定された関数を適用した結果である要素を持つコレクションを構築し、要素のインデックスも渡します。 2 つの入力配列の長さは同じである必要があります。 |
max | O(N) | O(N) | O(N) | - | - | max 演算子を使用して比較して、コレクション内で最も大きい要素を返します。 |
maxBy | O(N) | O(N) | O(N) | - | - | max を関数の結果に適用して比較し、コレクション内で最も大きい要素を返します。 |
マックスエレメント | - | - | - | - | 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) | - | - | 2 番目の要素の先行要素としてのみ返される最初の要素を除き、入力シーケンスとその先行要素の各要素のシーケンスを返します。 |
パーティション | O(N) | O(N) | - | O(N) | O(N) | コレクションを 2 つのコレクションに分割します。 最初のコレクションには、指定された述語が true を返す要素が含まれ、2 番目のコレクションには、指定された述語が false 返す要素が含まれています。 |
permute | O(N) | O(N) | - | - | - | 指定した順列に従ってすべての要素が順列された配列を返します。 |
pick | O(N) | O(N) | O(N) | O(log(N)) | - | 指定された関数を連続する要素に適用し、関数が Some を返す最初の結果を返します。 関数が Some を返さない場合は、System.Collections.Generic.KeyNotFoundException が発生します。 |
ランダム選択 | O(1) | O(1) | O(1) | - | - | 指定されたコレクションからランダムな要素を返します。 |
randomChoiceBy | O(1) | O(1) | O(1) | - | - | 指定した randomizer 関数を持つ指定したコレクションからランダムな要素を返します。 |
ランダムチョイスウィズ | O(1) | O(1) | O(1) | - | - | 指定した Random インスタンスを持つ、指定されたコレクションからランダムな要素を返します。 |
ランダムな選択肢 | O(count) | O(count) | O(count) | - | - | 指定されたコレクションからランダムな要素のコレクションを返します。各要素は複数回選択できます。 |
randomChoicesBy | O(count) | O(count) | O(count) | - | - | 指定した randomizer 関数を持つ指定したコレクションからランダムな要素のコレクションを返します。各要素は複数回選択できます。 |
ランダムチョイスウィズ | O(count) | O(count) | O(count) | - | - | 指定した Random インスタンスを持つ指定したコレクションからランダムな要素のコレクションを返します。各要素は複数回選択できます。 |
randomSample | O(count) | O(count) | O(count) | - | - | 指定されたコレクションから要素のランダムなサンプルを返します。各要素は 1 回だけ選択できます。 |
randomSampleBy | O(count) | O(count) | O(count) | - | - | 指定した randomizer 関数を持つ指定したコレクションから要素のランダムサンプルを返します。各要素は 1 回だけ選択できます。 |
ランダムサンプルウィズ | O(count) | O(count) | O(count) | - | - | 指定した Random インスタンスを持つ、指定されたコレクションの要素のランダムなサンプルを返します。各要素は 1 回だけ選択できます。 |
randomShuffle | O(N) | O(N) | O(N) | - | - | ランダムな順序でシャッフルされた新しいコレクションを返します。 |
randomShuffleBy | O(N) | O(N) | O(N) | - | - | 指定した randomizer 関数を使用してランダムな順序でシャッフルされた新しいコレクションを返します。 |
randomShuffleWith | O(N) | O(N) | O(N) | - | - | 指定した Random インスタンスでランダムな順序でシャッフルされた新しいコレクションを返します。 |
randomShuffleInPlace | O(N) | - | - | - | - | 配列をインプレースで変更することにより、入力配列をランダムな順序で並べ替えます。 |
randomShuffleInPlaceBy | O(N) | - | - | - | - | 指定された randomizer 関数を使用して配列をインプレースで変更することにより、入力配列をランダムな順序で並べ替えます。 |
randomShuffleInPlaceWith | O(N) | - | - | - | - | 指定された Random インスタンスを使用して配列をインプレースで変更することにより、入力配列をランダムな順序で並べ替えます。 |
readonly | - | - | O(N) | - | - | 指定したシーケンス オブジェクトにデリゲートするシーケンス オブジェクトを作成します。 この操作により、型キャストで元のシーケンスを再検出および変更できなくなります。 たとえば、配列が指定された場合、返されるシーケンスは配列の要素を返しますが、返されたシーケンス オブジェクトを配列にキャストすることはできません。 |
reduce | O(N) | O(N) | O(N) | - | - | コレクションの各要素に関数を適用し、計算を通じてアキュムレータ引数をスレッド化します。 この関数は、最初の 2 つの要素に関数を適用することから始まり、この結果を 3 番目の要素と共に関数に渡します。 この関数は最終的な結果を返します。 |
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) | - | - | コレクションの各要素に関数を適用し、計算を通じてアキュムレータ引数をスレッド化します。 この操作は、2 番目の引数とリストの最初の要素に関数を適用します。 その後、この結果が 2 番目の要素と共に関数に渡されます。 最後に、操作は中間結果と最終的な結果の一覧を返します。 |
scanBack | O(N) | O(N) | - | - | - | foldBack 操作に似ていますが、中間結果と最終結果の両方を返します。 |
シングルトン | - | - | O(1) | - | O(1) | 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)) | - | - | - | 指定した比較関数を順序として使用し、新しいコレクションを返して、コレクションの要素を並べ替えます。 |
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)) | 2 つのセットの和集合を計算します。 |
unionMany | - | - | - | - | O(N1*N2...) | セットのシーケンスの和集合を計算します。 |
unzip | O(N) | O(N) | O(N) | - | - | ペアのリストを 2 つのリストに分割します。 |
unzip3 | O(N) | O(N) | O(N) | - | - | トリプルのリストを 3 つのリストに分割します。 |
windowed | - | - | O(N) | - | - | 入力シーケンスから描画された要素を含むスライディング ウィンドウを生成するシーケンスを返します。 各ウィンドウは、新しい配列として返されます。 |
郵便番号 | O(N) | O(N) | O(N) | - | - | 2 つのコレクションを組み合わせてペアのリストを作成します。 2 つのリストの長さは同じである必要があります。 |
zip3 | O(N) | O(N) | O(N) | - | - | 3 つのコレクションを 3 要素のリストに結合します。 リストの長さは同じである必要があります。 |
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET