Jenis kumpulan F#

Dengan meninjau topik ini, Anda dapat menentukan jenis kumpulan F# mana yang paling sesuai dengan kebutuhan tertentu. Jenis kumpulan ini berbeda dari jenis kumpulan di .NET, seperti yang ada di namespace layanan System.Collections.Generic, di mana jenis kumpulan F# dirancang dari perspektif pemrograman fungsional daripada perspektif berorientasi objek. Lebih khusus lagi, hanya kumpulan array yang memiliki elemen yang dapat diubah. Oleh karena itu, saat memodifikasi kumpulan, Anda membuat instans kumpulan yang dimodifikasi dan bukan mengubah kumpulan asli.

Jenis kumpulan juga berbeda dalam jenis struktur data tempat objek disimpan. Struktur data seperti tabel hash, daftar tertaut, dan array memiliki karakteristik performa yang berbeda dan serangkaian operasi yang tersedia.

Tabel jenis kumpulan

Tabel berikut ini memperlihatkan jenis kumpulan F#.

Jenis Deskripsi Link Terkait
Daftar Serangkaian elemen yang diurutkan dan tidak dapat diubah dengan jenis yang sama. Diimplementasikan sebagai daftar tertaut. Daftar

Modul Daftar
Array Kumpulan elemen data berurutan dengan ukuran tetap, berbasis nol, dan dapat diubah yang semuanya berjenis sama. Array

Modul Array

Modul Array2D

Modul Array3D
seq Serangkaian elemen logis yang semuanya merupakan satu jenis. Urutan sangat berguna ketika Anda memiliki pengumpulan data yang besar dan teratur tetapi tidak selalu berharap untuk menggunakan semua elemen. Elemen urutan individu dihitung hanya sesuai kebutuhan, sehingga urutan dapat berperforma lebih baik daripada daftar jika tidak semua elemen digunakan. Urutan diwakili oleh jenis seq<'T>, yang merupakan alias untuk IEnumerable<T>. Oleh karena itu, setiap jenis .NET Framework yang mengimplementasikan System.Collections.Generic.IEnumerable<'T> dapat digunakan sebagai urutan. Urutan

Modul Seq
Peta Kamus elemen yang tidak dapat diubah. Elemen diakses oleh kunci. Modul Peta
Tetapkan Kumpulan yang tidak dapat diubah yang didasarkan pada pohon biner, di mana perbandingannya adalah fungsi perbandingan struktural F#, yang berpotensi menggunakan implementasi antarmuka System.IComparable pada nilai kunci. Atur Modul

Tabel fungsi

Bagian ini membandingkan fungsi yang tersedia pada jenis kumpulan F#. Kompleksitas komputasi fungsi diberikan, di mana N adalah ukuran kumpulan pertama, dan M adalah ukuran kumpulan kedua, jika ada. Tanda hubung (-) menunjukkan bahwa fungsi ini tidak tersedia pada kumpulan. Karena urutan dievaluasi dengan lambat, fungsi seperti Seq.distinct mungkin O(1) karena segera kembali, meskipun masih memengaruhi performa urutan saat dicacah.

Function Array List Sequence Peta Set Deskripsi
append O(N) O(N) O(N) - - Mengembalikan kumpulan baru yang berisi elemen kumpulan pertama diikuti oleh elemen kumpulan kedua.
tambahkan - - - O(log(N)) O(log(N)) Mengembalikan kumpulan baru dengan elemen ditambahkan.
rata-rata O(N) O(N) O(N) - - Mengembalikan rata-rata elemen dalam kumpulan.
averageBy O(N) O(N) O(N) - - Mengembalikan rata-rata hasil fungsi yang disediakan yang diterapkan ke setiap elemen.
blit O(N) - - - - Menyalin bagian array.
cache - - O(N) - - Menghitung dan menyimpan elemen urutan.
transmisikan - - O(N) - - Mengonversi elemen ke jenis yang ditentukan.
pilih O(N) O(N) O(N) - - Menerapkan fungsi f yang diberikan ke setiap elemen x pada daftar. Mengembalikan daftar yang berisi hasil untuk setiap elemen tempat fungsi mengembalikan Some(f(x)).
kumpulkan O(N) O(N) O(N) - - Menerapkan fungsi yang diberikan ke setiap elemen kumpulan, menggabungkan semua hasil, dan mengembalikan daftar gabungan.
compareWith - - O(N) - - Membandingkan dua barisan dengan menggunakan fungsi perbandingan yang diberikan, elemen demi elemen.
concat O(N) O(N) O(N) - - Menggabungkan enumerasi-dari-enumerasi yang diberikan sebagai enumerasi gabungan tunggal.
mengandung - - - - O(log(N)) Mengembalikan true jika rangkaian berisi elemen yang ditentukan.
containsKey - - - O(log(N)) - Menguji apakah elemen berada di domain peta.
jumlah - - - - O(N) Mengembalikan jumlah elemen di RDD.
countBy - - O(N) - - Menerapkan fungsi pembuatan kunci ke setiap elemen urutan, dan mengembalikan urutan yang menghasilkan kunci unik dan jumlah kemunculannya dalam urutan asli.
menyalin O(N) - O(N) - - Menyalin kumpulan.
buat O(N) - - - - Membuat array seluruh elemen yang semuanya awalnya merupakan nilai yang diberikan.
penundaan - - O(1) - - Mengembalikan urutan yang dibuat dari spesifikasi tertunda yang diberikan dari urutan.
difference - - - - O(M*log(N)) Mengembalikan rangkaian baru dengan elemen rangkaian kedua yang dihapus dari rangkaian pertama.
distinct O(1)* Mengembalikan urutan yang tidak berisi entri duplikat menurut hash umum dan perbandingan kesetaraan pada entri. Jika elemen terjadi beberapa kali secara berurutan, kemunculan selanjutnya akan dibuang.
distinctBy O(1)* Mengembalikan urutan yang tidak berisi entri duplikat sesuai dengan perbandingan hash umum dan kesetaraan pada kunci yang dikembalikan fungsi pembuat kunci yang diberikan. Jika elemen terjadi beberapa kali secara berurutan, kemunculan selanjutnya akan dibuang.
kosong O(1) O(1) O(1) O(1) O(1) Membuat kumpulan kosong.
ada O(N) O(N) O(N) O(log(N)) O(log(N)) Menguji apakah ada elemen urutan yang memenuhi predikat yang diberikan.
exists2 O(min(N,M)) - O(min(N,M)) Menguji apakah ada pasangan elemen yang sesuai dari urutan input memenuhi predikat yang diberikan.
fill O(N) Menetapkan berbagai elemen array ke nilai yang diberikan.
filter O(N) O(N) O(N) O(N) O(N) Mengembalikan kumpulan baru yang hanya berisi elemen kumpulan yang predikatnya mengembalikan true.
cari O(N) O(N) O(N) O(log(N)) - Mengembalikan elemen pertama yang mengembalikan fungsi yang mengembalikan true. Mengembalikan System.Collections.Generic.KeyNotFoundException jika tidak ada elemen tersebut.
findIndex O(N) O(N) O(N) - - Mengembalikan indeks elemen pertama dalam array yang memenuhi predikat yang diberikan. Menaikkan System.Collections.Generic.KeyNotFoundException jika tidak ada elemen yang memenuhi predikat.
findKey - - - O(log(N)) - Mengevaluasi fungsi pada setiap pemetaan dalam kumpulan, dan mengembalikan kunci untuk pemetaan pertama tempat fungsi mengembalikan true. Jika tidak ada elemen seperti itu, fungsi ini akan menaikkan System.Collections.Generic.KeyNotFoundException.
fold O(N) O(N) O(N) O(N) O(N) Menerapkan fungsi ke setiap elemen kumpulan, mengutamakan argumen akumulator melalui komputasi. Jika fungsi input adalah f dan elemennya adalah i0... iN, fungsi ini menghitung f (... (f s i0)...) iN.
fold2 O(N) O(N) - - - Menerapkan fungsi ke elemen yang sesuai dari dua kumpulan, mengutamakan argumen akumulator melalui komputasi. Kumpulan harus memiliki ukuran yang identik. Jika fungsi input adalah f dan elemennya adalah i0... iN dan j0... jN, fungsi ini menghitung f (... (f s i0 j0)...) iN jN.
foldBack O(N) O(N) - O(N) O(N) Menerapkan fungsi ke setiap elemen kumpulan, mengutamakan argumen akumulator melalui komputasi. Jika fungsi input adalah f dan elemennya adalah i0... iN, fungsi ini menghitung f i0 (... (f iN s)).
foldBack2 O(N) O(N) - - - Menerapkan fungsi ke elemen yang sesuai dari dua kumpulan, mengutamakan argumen akumulator melalui komputasi. Kumpulan harus memiliki ukuran yang identik. Jika fungsi input adalah f dan elemennya adalah i0... iN dan j0... jN, fungsi ini menghitung f i0 j0 (... (f iN jN s)).
forall O(N) O(N) O(N) O(N) O(N) Menguji apakah semua elemen kumpulan memenuhi predikat yang diberikan.
forall2 O(N) O(N) O(N) - - Menguji apakah semua elemen pengumpulan yang sesuai memenuhi predikat pasangan yang diberikan.
get / nth O(1) O(N) O(N) - - Mengembalikan elemen dari kumpulan yang diberikan indeksnya.
head - O(1) O(1) - - Mengembalikan elemen pertama dari kumpulan.
init O(N) O(N) O(1) - - Membuat kumpulan yang diberikan dimensi dan fungsi generator untuk menghitung elemen.
initInfinite - - O(1) - - Menghasilkan urutan yang, ketika diulang, mengembalikan elemen berturut-turut dengan memanggil fungsi yang diberikan.
intersect - - - - O(log(N)*log(M)) Menghitung persimpangan dua set.
intersectMany - - - - O(N1*N2...) Menghitung persimpangan urutan set. Urutan tidak boleh kosong.
isEmpty O(1) O(1) O(1) O(1) - Mengembalikan true jika kumpulan kosong.
isProperSubset - - - - O(M*log(N)) Mengembalikan true jika semua elemen dari rangkaian pertama ada di rangkaian kedua, dan setidaknya satu elemen dari rangkaian kedua tidak ada di rangkaian pertama.
isProperSuperset - - - - O(M*log(N)) Mengembalikan true jika semua elemen dari rangkaian kedua ada di rangkaian pertama, dan setidaknya satu elemen dari rangkaian pertama tidak ada di rangkaian kedua.
isSubset - - - - O(M*log(N)) Mengembalikan true jika semua elemen dari rangkaian pertama berada di rangkaian kedua.
isSuperset - - - - O(M*log(N)) Mengembalikan true jika semua elemen dari rangkaian kedua berada di rangkaian pertama.
iter O(N) O(N) O(N) O(N) O(N) Menerapkan fungsi yang diberikan ke setiap elemen kumpulan.
iteri O(N) O(N) O(N) - - Menerapkan fungsi yang diberikan ke setiap elemen kumpulan. Bilangan bulat yang diteruskan ke fungsi menunjukkan indeks elemen.
iteri2 O(N) O(N) - - - Menerapkan fungsi yang diberikan ke sepasang elemen yang diambil dari indeks yang cocok dalam dua array. Bilangan bulat yang diteruskan ke fungsi menunjukkan indeks elemen. Dua array harus memiliki panjang yang sama.
iter2 O(N) O(N) O(N) - - Menerapkan fungsi yang diberikan ke sepasang elemen yang diambil dari indeks yang cocok dalam dua array. Dua array harus memiliki panjang yang sama.
terakhir O(1) O(N) O(N) - - Mengembalikan item terakhir dalam kumpulan yang berlaku.
length O(1) O(N) O(N) - - Mengembalikan jumlah elemen dalam kumpulan.
peta O(N) O(N) O(1) - - Membangun kumpulan yang elemennya adalah hasil penerapan fungsi yang diberikan ke setiap elemen array.
map2 O(N) O(N) O(1) - - Membangun kumpulan yang elemennya adalah hasil penerapan fungsi yang diberikan ke elemen yang sesuai dari dua kumpulan secara berpasangan. Dua array input harus memiliki panjang yang sama.
map3 - O(N) - - - Membangun kumpulan yang elemennya adalah hasil penerapan fungsi yang diberikan ke elemen yang sesuai dari tiga kumpulan secara bersamaan.
mapi O(N) O(N) O(N) - - Membangun array yang elemennya adalah hasil penerapan fungsi yang diberikan ke setiap elemen array. Indeks bilangan bulat yang diteruskan ke fungsi menunjukkan indeks elemen yang sedang diubah.
mapi2 O(N) O(N) - - - Membangun kumpulan yang elemennya adalah hasil penerapan fungsi yang diberikan ke elemen yang sesuai dari dua kumpulan secara berpasangan, juga meneruskan indeks elemen. Dua array input harus memiliki panjang yang sama.
maks O(N) O(N) O(N) - - Mengembalikan elemen terbesar dalam kumpulan, dibandingkan dengan menggunakan operator mak .
maxBy O(N) O(N) O(N) - - Mengembalikan elemen terbesar dalam kumpulan, dibandingkan dengan menggunakan max pada hasil fungsi.
maxElement - - - - O(log(N)) Mengembalikan elemen terbesar dalam rangkaian sesuai dengan urutan yang digunakan untuk rangkaian tersebut.
mnt O(N) O(N) O(N) - - Mengembalikan elemen terkecil dalam kumpulan, dibandingkan dengan menggunakan operator min.
minBy O(N) O(N) O(N) - - Mengembalikan elemen terkecil dalam kumpulan, dibandingkan dengan menggunakan operator min pada hasil fungsi.
minElement - - - - O(log(N)) Mengembalikan elemen terendah dalam rangkaian sesuai dengan urutan yang digunakan untuk rangkaian tersebut.
ofArray - O(N) O(1) O(N) O(N) Membuat kumpulan yang berisi elemen yang sama dengan array yang diberikan.
ofList O(N) - O(1) O(N) O(N) Membuat kumpulan yang berisi elemen yang sama dengan daftar yang diberikan.
ofSeq O(N) O(N) - O(N) O(N) Membuat kumpulan yang berisi elemen yang sama dengan urutan yang diberikan.
pairwise - - O(N) - - Mengembalikan urutan setiap elemen dalam urutan input dan pendahulunya kecuali untuk elemen pertama, yang dikembalikan hanya sebagai pendahulu elemen kedua.
partisi O(N) O(N) - O(N) O(N) Membagi kumpulan menjadi dua kumpulan. Kumpulan pertama berisi elemen yang predikatnya dikembalikan true, dan koleksi kedua berisi elemen yang predikatnya mengembalikan false.
permute O(N) O(N) - - - Mengembalikan array dengan semua elemen yang diubah sesuai dengan permutasi yang ditentukan.
pick O(N) O(N) O(N) O(log(N)) - Menerapkan fungsi yang diberikan ke elemen berurutan, mengembalikan hasil pertama di mana fungsi mengembalikan Some. Jika fungsi tidak pernah mengembalikan Some, System.Collections.Generic.KeyNotFoundException dimunculkan.
hanyabaca - - O(N) - - Membuat objek urutan yang mendelegasikan ke objek urutan yang diberikan. Operasi ini memastikan bahwa pemeran tipe tidak dapat menemukan kembali dan mengubah urutan aslinya. Misalnya, jika diberikan array, urutan yang dikembalikan akan mengembalikan elemen array, tetapi Anda tidak dapat mentransmisikan objek urutan yang dikembalikan ke array.
reduce O(N) O(N) O(N) - - Menerapkan fungsi ke setiap elemen kumpulan, mengutamakan argumen akumulator melalui komputasi. Fungsi ini dimulai dengan menerapkan fungsi ke dua elemen pertama, meneruskan hasil ini ke dalam fungsi bersama dengan elemen ketiga, dan sebagainya. Fungsi ini mengembalikan hasil akhir.
reduceBack O(N) O(N) - - - Menerapkan fungsi ke setiap elemen kumpulan, mengutamakan argumen akumulator melalui komputasi. Jika fungsi input adalah f dan elemennya adalah i0... iN, fungsi ini menghitung f i0 (... (f iN-1 iN)).
buka - - - O(log(N)) O(log(N)) Menghapus elemen dari domain peta. Tidak ada pengecualian yang dimunculkan jika elemen tidak ada.
Replikasi - O(N) - - - Membuat daftar panjang yang ditentukan dengan setiap elemen yang diatur ke nilai yang diberikan.
rev O(N) O(N) - - - Mengembalikan daftar baru dengan elemen dalam urutan terbalik.
scan O(N) O(N) O(N) - - Menerapkan fungsi ke setiap elemen kumpulan, mengutamakan argumen akumulator melalui komputasi. Operasi ini menerapkan fungsi ke argumen kedua dan elemen pertama dari daftar. Operasi kemudian meneruskan hasil ini ke dalam fungsi bersama dengan elemen kedua dan sebagainya. Akhirnya, operasi mengembalikan daftar hasil perantara dan hasil akhir.
scanBack O(N) O(N) - - - Menyerupai operasi foldBack tetapi mengembalikan hasil antara dan akhir.
database tunggal - - O(1) - O(1) Mengembalikan urutan yang hanya menghasilkan satu item.
set O(1) - - - - Mengatur elemen array ke nilai yang ditentukan.
skip - - O(N) - - Mengembalikan urutan yang melewati elemen N dari urutan yang mendasar dan kemudian menghasilkan elemen urutan yang tersisa.
skipWhile - - O(N) - - Mengembalikan urutan yang, ketika diulang, melewatkan elemen dari urutan yang mendasarinya sementara predikat yang diberikan mengembalikan true dan kemudian menghasilkan elemen urutan yang tersisa.
urutkan O(N*log(N)) rata-rata

O(N^2) kasus terburuk
O(N*log(N)) O(N*log(N)) - - Mengurutkan kumpulan menurut nilai elemen. Elemen dibandingkan menggunakan compare.
sortBy O(N*log(N)) rata-rata

O(N^2) kasus terburuk
O(N*log(N)) O(N*log(N)) - - Mengurutkan daftar yang diberikan dengan menggunakan kunci yang disediakan proyeksi yang diberikan. Kunci dibandingkan menggunakan compare.
sortInPlace O(N*log(N)) rata-rata

O(N^2) kasus terburuk
- - - - Mengurutkan elemen array dengan mengubahnya di tempatnya dan menggunakan fungsi perbandingan yang diberikan. Elemen dibandingkan dengan menggunakan perbandingan.
sortInPlaceBy O(N*log(N)) rata-rata

O(N^2) kasus terburuk
- - - - Mengurutkan elemen array dengan bermutasi di tempatnya dan menggunakan proyeksi yang diberikan untuk kunci. Elemen dibandingkan dengan menggunakan perbandingan.
sortInPlaceWith O(N*log(N)) rata-rata

O(N^2) kasus terburuk
- - - - Mengurutkan elemen array dengan bermutasi di tempat dan menggunakan fungsi perbandingan yang diberikan sebagai urutan.
sortWith O(N*log(N)) rata-rata

O(N^2) kasus terburuk
O(N*log(N)) - - - Mengurutkan elemen kumpulan, menggunakan fungsi perbandingan yang diberikan sebagai urutan dan mengembalikan kumpulan baru.
sub O(N) - - - - Membuat array yang berisi subrentang tertentu yang ditentukan oleh indeks dan panjang awal.
sum O(N) O(N) O(N) - - Mengembalikan jumlah elemen dalam kumpulan.
sumBy O(N) O(N) O(N) - - Mengembalikan jumlah hasil yang dihasilkan dengan menerapkan fungsi ke setiap elemen kumpulan.
tail - O(1) - - - Mengembalikan daftar tanpa elemen pertamanya.
take - - O(N) - - Mengembalikan elemen urutan hingga jumlah yang ditentukan.
takeWhile - - O(1) - - Mengembalikan urutan yang, ketika diulang, menghasilkan elemen dari urutan yang mendasarinya sementara predikat yang diberikan mengembalikan true dan kemudian tidak mengembalikan elemen lagi.
toArray - O(N) O(N) O(N) O(N) Membuat array dari kumpulan yang diberikan.
toList O(N) - O(N) O(N) O(N) Membuat daftar dari kumpulan yang diberikan.
toSeq O(1) O(1) - O(1) O(1) Membuat urutan dari kumpulan yang diberikan.
Memotong - - O(1) - - Mengembalikan urutan yang, saat dijumlahkan, mengembalikan tidak lebih dari elemen N.
tryFind O(N) O(N) O(N) O(log(N)) - Mencari elemen yang memenuhi predikat tertentu.
tryFindIndex O(N) O(N) O(N) - - Menelusuri elemen pertama yang memenuhi predikat tertentu dan mengembalikan indeks elemen yang cocok, atau None jika tidak ada elemen tersebut.
tryFindKey - - - O(log(N)) - Mengembalikan kunci pemetaan pertama dalam kumpulan yang memenuhi predikat yang diberikan, atau mengembalikan None jika tidak ada elemen tersebut.
tryPick O(N) O(N) O(N) O(log(N)) - Menerapkan fungsi yang diberikan ke elemen berturut-turut, mengembalikan hasil pertama di mana fungsi mengembalikan Some untuk beberapa nilai. Jika tidak ada elemen seperti itu, operasi akan mengembalikan None.
membuka - - O(N) - - Mengembalikan urutan yang berisi elemen yang dihasilkan oleh komputasi yang diberikan.
penyatuan - - - - O(M*log(N)) Menghitung penyatuan dua rangkaian.
unionMany - - - - O(N1*N2...) Menghitung penyatuan urutan rangkaian.
unzip O(N) O(N) O(N) - - Membagi daftar pasangan menjadi dua daftar.
unzip3 O(N) O(N) O(N) - - Membagi daftar tiga kali lipat menjadi tiga daftar.
Windowed - - O(N) - - Mengembalikan urutan yang menghasilkan jendela geser yang berisi elemen yang digambar dari urutan input. Setiap jendela dikembalikan sebagai array baru.
zip O(N) O(N) O(N) - - Menggabungkan dua kumpulan ke dalam daftar pasangan. Dua daftar harus memiliki panjang yang sama.
zip3 O(N) O(N) O(N) - - Menggabungkan tiga kumpulan menjadi daftar tiga kali lipat. Daftar harus memiliki panjang yang sama.

Lihat juga