Tidak mengatur pesanan pemasangan?
Java mengatur pesanan mempertahankan
Tidak seperti pada set standar, urutan data dalam set yang dipesan dipertahankan. Kami menggunakan set yang dipesan ketika kami membutuhkan urutan di mana kami memasukkan data untuk dipertahankan selama program. Dalam set yang dipesan, melihat data tidak mengubah pesanannya seperti pada set yang tidak berurutan.
Set Python Memesan: Tinjauan Umum
Pemrograman terutama tentang menangani data. Sebagai pengembang Python, Anda akan menemukan cara untuk menyimpan data dengan cara yang konsisten dengan tujuan Anda. Terkadang, Anda harus menjaga urutan penyisipan data dalam satu set, misalnya, jika Anda menangani transaksi bank. Setiap transaksi harus unik, dan penting untuk mempertahankan urutan transaksi yang dibuat. Set yang dipesan Python membantu Anda melakukan hal itu.
Dalam artikel ini, kami akan menjelaskan konsep pemrograman dari set yang dipesan, sebelum menunjukkan kepada Anda cara membuatnya dalam program Python.
Apa set python?
Dalam bahasa pemrograman Python, satu set adalah kumpulan elemen unik. Ini adalah struktur data berbasis tabel hash dengan pemesanan elemen yang tidak ditentukan. Anda dapat menelusuri elemen set, menambah atau menghapusnya, dan melakukan operasi set standar Union, persimpangan, pelengkap, dan perbedaan.
Tidak seperti daftar, set biasa tidak menjaga urutan di mana kami memasukkan elemen. Ini karena elemen -elemen dalam satu set biasanya tidak disimpan dalam urutan yang muncul.
Apa itu set yang dipesan?
Tidak seperti pada set standar, urutan data dalam set yang dipesan dipertahankan. Kami menggunakan set yang dipesan ketika kami membutuhkan urutan di mana kami memasukkan data untuk dipertahankan selama program. Dalam set yang dipesan, melihat data tidak mengubah pesanannya seperti pada set yang tidak berurutan.
Cara membuat set yang dipesan dalam python
Python memungkinkan Anda membuat set yang dipesan di program Anda. Di bawah ini kami akan menunjukkan dua cara untuk melakukannya: Menggunakan Python ordered-set paket, dan metode manual. Tapi pertama -tama, mari kita buat konteks. Katakanlah Anda mengembangkan aplikasi untuk bank di mana Anda perlu merekam nomor transaksi satu demi satu dalam dokumen ringkasan. Setiap operasi transaksi bank unik.
Juga, Anda ingin urutan transaksi dilakukan untuk mencerminkan persis dalam set data Anda. Ini adalah kesempatan yang sempurna bagi Anda untuk menggunakan Orderedset Kelas termasuk dalam Python ordered_set kemasan.
Kelas Set Python yang dipesan
Cara paling sederhana untuk membuat set yang dipesan di Python adalah dengan menggunakan kelas pesanan. Perhatikan bahwa kelas ini tidak termasuk secara default. Pertama -tama Anda harus memastikan Anda memiliki ordered-set Paket diinstal.
Perhatikan itu ordered-set adalah paket pihak ketiga, dan fungsinya dapat berubah secara independen dari versi Python yang Anda gunakan. Untuk menginstal paket, ketik perintah berikut di terminal Anda:
instalasi PIP yang dipesan
Ini akan memungkinkan Anda untuk menggunakan kelas pesanan.
Sekarang, Anda dapat membuat program Python yang menggunakan kelas pesanan. Mari kita lihat seperti apa rangkaian yang dipesan sederhana:
dari ordered_set impor orderedset setest = orderedset (["pertama", "kedua", "kedua", "ketiga"]) cetak (settest)
Pertama, kami mengimpor paket ordered_set yang baru diinstal. Kemudian, kami membuat objek dari kelas yang dipesan, meneruskan anggota sebagai parameter. Pernyataan cetak dalam contoh ini menghasilkan yang berikut:
Orderedset (['pertama', 'kedua', 'ketiga'])
String ‘kedua’ yang kami masukkan dua kali saat membuat set sekarang hilang, sedangkan urutan di mana kami memasukkan data dipertahankan.
Sekarang, mari kita buat set transaksi bank yang dipesan. Dalam skenario dunia nyata, Anda ingin menjaga urutan penyisipan, untuk memungkinkan Anda menganalisis transaksi, memeriksa penipuan, dan sebagainya. Begini penampilan programnya:
dari ordered_set impor orderedset bankstatement = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"])).
Set yang dipesan dibuat.
Sekarang, jika Anda ingin transaksi yang diberikan, Anda dapat memilih set item yang sesuai menggunakan indeksnya:
. print ("Transaction No", BankStatement [1], "telah dicatat dengan sukses")
Ini memberi Anda output berikut:
Transaksi Tidak ada BK0002 yang berhasil dicatat
Tetapi bagaimana jika seseorang ingin menambahkan transaksi yang telah direkam, seperti ‘BK0004’? Jika kami menggunakan daftar, tindakan ini akan dimungkinkan. Untungnya, set yang dipesan tidak mengizinkannya. Mari kita jalankan kode berikut:
Banktrs.Tambahkan ("BK0004") Cetak (Banktrs)
Hasil dari pernyataan cetak tetap tidak berubah, membuktikan bahwa set yang dipesan mengabaikan tindakan:
Orderedset (['bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005'])
Fitur ini terbukti sangat berguna dalam hal ini. Sebagai seorang programmer, Anda tidak perlu khawatir memastikan bahwa setiap anggota data unik.
Paket yang dipesan berisi fitur penting lainnya. Ini memungkinkan Anda untuk melakukan operasi yang berguna seperti perbedaan, persimpangan dan persatuan menggunakan operator -, & dan |.
Tetapkan operasi
Mari kita tulis ulang program untuk membuat dua set yang dipesan berbeda yang dapat mewakili dua laporan bank.
from ordered_set import OrderedSet bankStatement1 = OrderedSet(["BK0001","BK0002","BK0003","BK0004","BK0005"]) bankStatement2 = OrderedSet(["BK0004","BK0005","BK0006","BK0007","BK0008"])
Kami sengaja memasukkan transaksi BK0004 dan BK0005 di kedua pernyataannya. Itu bisa menjadi kasus jika yang pertama dan
1. Apa tujuan dari set yang dipesan dalam Python?
Set yang dipesan dalam python digunakan untuk mempertahankan urutan penyisipan data, yang penting dalam skenario seperti menangani transaksi bank.
2. Bagaimana satu set berbeda dari set yang dipesan di Python?
Set di Python tidak menjaga urutan elemen, sedangkan set yang dipesan tidak.
3. Bagaimana Anda bisa membuat set yang dipesan di Python?
Anda dapat membuat set yang dipesan di Python dengan menggunakan kelas pesanan dari paket yang dipesan. Pertama, pastikan paket diinstal, lalu impor kelas dan buat objek dengan elemen yang diinginkan.
4. Apa yang terjadi jika Anda mencoba menambahkan elemen duplikat ke set yang dipesan?
Set yang dipesan tidak mengizinkan elemen duplikat, jadi mencoba menambahkan elemen duplikat tidak akan mengubah set.
5. Apa saja keuntungan menggunakan set yang dipesan di Python?
Salah satu keuntungan menggunakan set yang dipesan adalah Anda tidak perlu khawatir untuk memastikan elemen unik, karena secara otomatis menangani duplikat. Selain itu, ini menjaga urutan penyisipan data, yang dapat berguna untuk menganalisis dan memproses data.
6. Dapatkah Anda melakukan operasi set seperti Union dan persimpangan dengan set yang dipesan?
Ya, paket yang dipesan memungkinkan Anda untuk melakukan operasi yang ditetapkan seperti perbedaan, persimpangan, dan persatuan menggunakan operator -, &, dan |.
7. Bagaimana Anda dapat mengakses elemen tertentu dalam satu set yang dipesan?
Anda dapat mengakses elemen spesifik dalam set yang dipesan dengan menggunakan indeks elemen, mirip dengan mengakses elemen dalam daftar.
8. Adalah kelas pesanan yang disertakan secara default di Python?
Tidak, kelas pesanan tidak termasuk secara default di Python. Anda perlu menginstal paket yang dipesan untuk menggunakannya.
9. Dapatkah fungsionalitas paket yang dipesan berubah secara independen dari versi python?
Ya, fungsionalitas paket yang dipesan terpisah dari versi Python yang Anda gunakan. Ini adalah paket pihak ketiga yang dapat diperbarui dan diubah secara mandiri.
10. Bagaimana Anda bisa menginstal paket yang dipesan di Python?
Anda dapat menginstal paket yang dipesan di Python dengan menggunakan perintah PIP di terminal Anda: “PIP Instal ordered-set”.
Java mengatur pesanan mempertahankan
Tidak seperti pada set standar, urutan data dalam set yang dipesan dipertahankan. Kami menggunakan set yang dipesan ketika kami membutuhkan urutan di mana kami memasukkan data untuk dipertahankan selama program. Dalam set yang dipesan, melihat data tidak mengubah pesanannya seperti pada set yang tidak berurutan.
Set Python Memesan: Tinjauan Umum
Pemrograman terutama tentang menangani data. Sebagai pengembang Python, Anda’akan menemukan cara untuk menyimpan data dengan cara yang konsisten dengan tujuan Anda. Terkadang kamu’LL perlu mempertahankan urutan penyisipan data dalam satu set, misalnya, jika Anda menangani transaksi bank. Setiap transaksi harus unik, dan penting untuk mempertahankan urutan transaksi yang dibuat. Python’S yang dipesan membantu Anda melakukan hal itu.
Dalam artikel ini, kami akan menjelaskan konsep pemrograman dari set yang dipesan, sebelum menunjukkan kepada Anda cara membuatnya dalam program Python.
Apa set python?
Dalam bahasa pemrograman Python, satu set adalah kumpulan elemen unik. Ini adalah struktur data berbasis tabel hash dengan pemesanan elemen yang tidak ditentukan. Anda dapat menelusuri satu set’elemen, menambah atau menghapusnya, dan melakukan operasi set standar Union, persimpangan, pelengkap, dan perbedaan.
Tidak seperti daftar, set biasa tidak menjaga urutan di mana kami memasukkan elemen. Ini karena elemen -elemen dalam satu set biasanya tidak disimpan dalam urutan yang muncul.
Apa itu set yang dipesan?
Tidak seperti pada set standar, urutan data dalam set yang dipesan dipertahankan. Kami menggunakan set yang dipesan ketika kami membutuhkan urutan di mana kami memasukkan data untuk dipertahankan selama program. Dalam set yang dipesan, melihat data tidak mengubah pesanannya seperti pada set yang tidak berurutan.
Cara membuat set yang dipesan dalam python
Python memungkinkan Anda membuat set yang dipesan di program Anda. Di bawah kami’LL mendemonstrasikan dua cara untuk melakukannya: menggunakan python’S ordered-set paket, dan metode manual. Tapi pertama, biarkan’S membuat konteks. Membiarkan’S Say You’kembali mengembangkan aplikasi untuk bank di mana Anda perlu merekam nomor transaksi satu demi satu dalam dokumen ringkasan. Setiap operasi transaksi bank unik.
Juga, Anda ingin urutan transaksi dilakukan untuk mencerminkan persis dalam set data Anda. Ini adalah kesempatan yang sempurna bagi Anda untuk menggunakan Orderedset Kelas termasuk dalam Python’S ordered_set kemasan.
Python’s yang dipesan kelas set
Cara paling sederhana untuk membuat set yang dipesan di Python adalah dengan menggunakan kelas pesanan. Perhatikan bahwa kelas ini tidak termasuk secara default. Pertama -tama Anda harus memastikan Anda memiliki ordered-set Paket diinstal.
Perhatikan itu ordered-set adalah paket pihak ketiga, dan fungsinya dapat berubah secara independen dari versi Python yang Anda’menggunakan kembali. Untuk menginstal paket, ketik perintah berikut di terminal Anda:
instalasi PIP yang dipesan
Ini akan memungkinkan Anda untuk menggunakan kelas pesanan.
Sekarang, Anda dapat membuat program Python yang menggunakan kelas pesanan. Membiarkan’s lihat seperti apa set yang dipesan sederhana:
dari ordered_set impor orderedset setest = orderedset (["pertama", "kedua", "kedua", "ketiga"]) cetak (settest)
Pertama, kami mengimpor paket ordered_set yang baru diinstal. Kemudian, kami membuat objek dari kelas yang dipesan, meneruskan anggota sebagai parameter. Pernyataan cetak dalam contoh ini menghasilkan yang berikut:
Orderedset (['pertama', 'kedua', 'ketiga'])
String ‘Kedua’ bahwa kami memasuki dua kali saat membuat set sekarang hilang, sedangkan urutan di mana kami memasukkan data dipertahankan.
Sekarang, biarkan’s Buat set transaksi bank yang dipesan. Dalam skenario dunia nyata, Anda ingin menjaga urutan penyisipan, untuk memungkinkan Anda menganalisis transaksi, memeriksa penipuan, dan sebagainya. Begini penampilan programnya:
dari ordered_set impor orderedset bankstatement = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"])).
Set yang dipesan dibuat.
Sekarang, jika Anda ingin transaksi yang diberikan, Anda dapat memilih set item yang sesuai menggunakan indeksnya:
. print ("Transaction No", BankStatement [1], "telah dicatat dengan sukses")
Ini memberi Anda output berikut:
Transaksi Tidak ada BK0002 yang berhasil dicatat
Tetapi bagaimana jika seseorang ingin menambahkan transaksi yang telah direkam, seperti “BK0004”? Jika kami menggunakan daftar, tindakan ini akan dimungkinkan. Untungnya, set yang dipesan tidak mengizinkannya. Membiarkan’S Jalankan kode berikut:
Banktrs.Tambahkan ("BK0004") Cetak (Banktrs)
Hasil dari pernyataan cetak tetap tidak berubah, membuktikan bahwa set yang dipesan mengabaikan tindakan:
Orderedset (['bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005'])
Fitur ini terbukti sangat berguna dalam hal ini. Sebagai seorang programmer, Anda menang’Aku harus khawatir memastikan bahwa setiap anggota data unik.
Paket yang dipesan berisi fitur penting lainnya. Ini memungkinkan Anda untuk melakukan operasi yang berguna seperti perbedaan, persimpangan dan persatuan menggunakan operator -, & Dan |.
Tetapkan operasi
Membiarkan’S Tulis ulang program untuk membuat dua set yang dipesan berbeda yang dapat mewakili dua laporan bank.
from ordered_set import OrderedSet bankStatement1 = OrderedSet(["BK0001","BK0002","BK0003","BK0004","BK0005"]) bankStatement2 = OrderedSet(["BK0004","BK0005","BK0006","BK0007","BK0008"])
Kami sengaja memasukkan transaksi BK0004 dan BK0005 di kedua pernyataannya. Itu bisa menjadi kasus jika pernyataan pertama dan kedua sebagian mencakup periode waktu yang sama.
Jika Anda ingin melihat transaksi yang hanya ada di BankStatement1, cukup jalankan bit kode berikut:
Diff = BankStatement1 - BankStatement2 Print ("Transaksi yang unik untuk ringkasan pertama adalah", Diff)
Ini memberi kita hasil berikut:
Transaksi yang unik untuk ringkasan pertama adalah pesanan (['bk0001', 'bk0002', 'bk0003'])
Untuk tujuan keterbacaan, kita dapat melampirkan set yang dipesan Inter dalam daftar saat menampilkan data menggunakan kode ini:
Diff = BankStatement1 - BankStatement2 Print ("Transaksi Unik untuk Ringkasan Pertama adalah", Daftar (Diff))
Sekarang, jika Anda perlu mengambil hanya transaksi yang ada di kedua pernyataan, gunakan pernyataan persimpangan seperti itu:
Inter = BankStatement1 & BankStatement2 Print ("Transaksi yang umum untuk kedua ringkasan adalah", Daftar (Inter))
Anda’akan mendapatkan hasil yang dimaksudkan:
Transaksi yang umum untuk kedua ringkasan dipesan ['bk0004', 'bk0005']
Akhirnya, jika Anda ingin melihat semua transaksi dari kedua pernyataan, cukup lakukan operasi serikat:
Union = BankStatement1 | BankStatement2 Print ("Berikut semua transaksi dari ringkasan ini:", LIS (Union))
Ini akan memberi Anda output berikut:
Berikut adalah semua transaksi dari ringkasan ini: orderedset ['bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005', 'bk0006', 'bk0007', 'bk0008']
Paket ordered_set membuat membuat dan memanipulasi set yang dipesan dalam python sederhana dan efektif.
Metode manual
Juga dimungkinkan untuk membuat set data yang dipesan sepenuhnya secara manual. Jika Anda tidak dapat menggunakan paket yang dipesan, Anda masih dapat menggunakan solusi ini. Membiarkan’s lihat bagaimana metode ini bekerja.
Pertama kita’ll membuat array string yang berisi set data kami:
BankStatement = ["BK0001", "BK0002", "BK0003", "BK0004", "BK0004", "BK0005", "BK0006"]
Kemudian, kami membuat loop untuk memeriksa setiap elemen, mencari duplikat. Jika ada, mereka akan dihapus dari set. Untuk menguji ini, kami’LL dengan sengaja menyertakan elemen duplikat dalam array.
Untuk string dalam kisaran (len (BankStatement), 1, -1): jika BankStatement [String-1] di BankStatement [: String-1]: BankStatement.pop (string-1)
Loop untuk mulai berulang dari bagian belakang daftar, yaitu dari elemen terakhir. Dibutuhkan elemen itu (disebut string di atas) dan memeriksa apakah sudah ada di subset daftar sampai Tetapi tidak termasuk elemen saat ini (string). Jika sudah ada, kami menghapus penyebutan elemen lebih dekat ke bagian depan daftar, tetapi tetap menyebutkan unsur asli lebih dekat ke bagian belakang daftar.
Sekarang, ketika kami mencetak konten array, tidak ada duplikat dan pesanan dipertahankan:
['Bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005', 'bk0006']
Ini memungkinkan kami untuk membuat set yang dipesan bahkan jika kami tidak dapat menggunakan python’S fitur khusus!
Belajar membuat kode online
Python adalah bahasa pemrograman serbaguna dengan beberapa opsi untuk membuat set yang dipesan. Anda dapat menggunakan kelas pesanan untuk menyelesaikan pekerjaan, atau Anda dapat melakukannya secara manual jika diperlukan.
Ingin melampaui kreasi set yang dipesan di Python?
Udacity’S PENGANTAR PROGRAM PROGRIMING PROGRAM PROGRAM PROGRAM. Di akhir kursus ini, Anda’ll tahu dasar-dasar pengkodean dan memiliki keterampilan untuk dengan percaya diri mengelola skenario pemrograman dunia nyata menggunakan HTML, CSS, Python, dan banyak lagi!
Contoh kode lengkap
Contoh 1: Transaksi Bank yang Diperintahkan Set Pembuatan
dari ordered_set impor orderedset bankstatement = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) cetak ("transaksi no", bankstatement [1], "telah dicatat dengan sukses") Banktrs) Banktrs).Tambahkan ("BK0004") Cetak (Banktrs)
Contoh 2: Berbeda, Union, Persimpangan
dari ordered_set impor orderedset bankStatement1 = orderedset (["bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) bankstatement2 = orderedset (["BK0004", "BK0005", "BK0006", "BK0007", "BK0007") (BK0005 "," BK0006 "," BK0007 "," BK0007 "," BK0007 "," BK0007 "," BK0007 "," BK0007 "," BK0007 "," BK0004 "," BK0004 "," BK0004 "," BK000, " Unik untuk ringkasan pertama adalah ", Daftar (Diff)) Inter = BankStatement1 & BankStatement2 Print (" Transaksi yang umum untuk kedua ringkasan adalah ", Daftar (Inter)) Union = BankStatement1 | BankStatement2 Print ("Berikut semua transaksi dari ringkasan ini:", Daftar (Union))
Contoh 3: Metode manual
BankStatement = ["BK0001", "BK0002", "BK0003", "BK0004", "Bk0004", "Bk0005", "Bk0006"] untuk string dalam kisaran (Len (BankStatement), 1, -1): jika BankStatement [String-1 di BankStatement [: String-1]: Bankstatement [String-1 di BankStatement [: String-1]: Bankstatement.Pop (String-1) Print (BankStatement)
Java mengatur pesanan mempertahankan?
Apakah java set mempertahankan pesanan? Suatu metode mengembalikan set ke saya dan seharusnya data dipesan tetapi iterasi atas set, data tidak berurutan. Apakah ada cara yang lebih baik untuk mengelola ini? Apakah metode perlu diubah untuk mengembalikan sesuatu selain satu set?
30.6K 27 27 Lencana Emas 91 91 Lencana Perak 100 100 Lencana Perunggu
Ditanya 25 Mei 2012 pukul 10:27
user840930 user840930
5.084 21 21 Lencana Emas 62 62 Lencana Perak 93 93 Lencana Perunggu
“Elemen dikembalikan tanpa urutan tertentu (kecuali set ini adalah instance dari beberapa kelas yang memberikan jaminan).”adalah apa yang dikatakan metode iterator untuk satu set. ditemukan di sini
25 Mei 2012 pukul 10:29
13 Jawaban 13
Antarmuka yang ditetapkan tidak memberikan jaminan pemesanan apa pun.
Sub-antarmuka SortedSet mewakili satu set yang diurutkan sesuai dengan beberapa kriteria. Di Java 6, ada dua wadah standar yang menerapkan sortedset . Mereka adalah TreeSet dan ConcurrentsKiplistet .
Selain antarmuka sortedset, ada juga kelas LinkedHashSet. Itu mengingat urutan di mana elemen dimasukkan ke dalam set, dan mengembalikan elemennya dalam urutan itu.
10.9k 10 10 Lencana Emas 70 70 Lencana Perak 94 94 Lencana Perunggu
Dijawab 25 Mei 2012 jam 10:30
483k 107 107 Lencana Emas 943 943 Lencana Perak 1007 1007 Lencana Perunggu
Selain itu, karena hashing string yang berbeda di Java 8, pemesanan default (tidak disortir) dalam set dan peta akan berubah. Jika Anda mengandalkan pemesanan yang tidak disortir, kode Anda akan berperilaku berbeda di bawah Java 8.
17 Nov 2014 jam 16:15
Saya mengerti bahwa kelas yang tidak memesan adalah normal, tetapi perilaku yang saya harapkan adalah meninggalkan mereka saat mereka diperkenalkan dan tidak mengacaukan pesanan, sebaliknya itu hanya mengocok elemen setiap kali satu dikumpulkan. Solusi Anda tidak optimal layu karena dengan begitu saya harus menerapkan seluruh struktur agar mereka diurutkan dengan cara yang sama seperti yang diperkenalkan: s
25 Feb 2019 jam 8:39
@White_king: Suatu set adalah konsep matematika yang tidak mengandung gagasan “urutan penyisipan” sehingga masuk akal bagi antarmuka java untuk mengikuti konvensinya. Ada set yang dipesan tetapi urutan ditentukan oleh suatu relasi (pembanding dalam java), sekali lagi mencocokkan definisi dalam teori set dengan definisi di java. Harapan Anda untuk menjaga pesanan penyisipan mungkin berasal dari daftar tetapi set bukanlah daftar.
9 Agustus 2019 jam 10:53
4.396 11 11 Lencana Emas 34 34 Lencana Perak 58 58 Lencana Perunggu
Dijawab 25 Mei 2012 pukul 10:29
Xiaofeng.Li Xiaofeng.li
8.117 2 2 Lencana Emas 23 23 Lencana Perak 30 30 Lencana Perunggu
Daftar bukan satu set (tidak menjamin keunikan keanggotaan).
6 Juni 2013 jam 22:03
Dalam banyak bisnis, daftar unik bisnis tidak dapat digunakan hanya untuk mempertahankan pesanan alih -alih ditetapkan. LinkedHashset mempertahankan pesanan dan menyimpan unik.
9 Jul 2015 jam 15:34
Karena banyak anggota menyarankan penggunaan LinkedHashset untuk mempertahankan urutan koleksi. Anda dapat membungkus set Anda menggunakan implementasi ini.
Sortedset Implementasi dapat digunakan untuk pesanan yang diurutkan tetapi untuk penggunaan tujuan Anda LinkedHashset.
Juga dari dokumen,
“Implementasi ini menyelamatkan kliennya dari pemesanan yang tidak ditentukan, umumnya kacau yang disediakan oleh HashSet, tanpa menimbulkan peningkatan biaya yang terkait dengan Treeeset. Ini dapat digunakan untuk menghasilkan salinan set yang memiliki urutan yang sama dengan yang asli, terlepas dari implementasi set asli: “
Tidak mengatur pesanan pemasangan?
Ketika elemen didapat dari hashset karena hashing urutan yang mereka masukkan tidak dipertahankan saat pengambilan. Hashset menyimpan elemen -elemen dengan menggunakan mekanisme yang disebut hashing. Kita dapat mencapai tugas yang diberikan menggunakan LinkedHashset. Kelas LinkedHashset mengimplementasikan daftar yang terhubung dengan ganda sehingga dapat melintasi semua elemen.
Contoh:
Memasukkan : HashsetInput = Keluaran: Hashsetprint = Memasukkan : HashsetInput = Keluaran: Hashsetprint =
Implementasi dengan HashSet: (pesanan tidak dipertahankan)
Sintaksis:
Hashset num = hashset baru ();
Mendekati:
- Buat Objek Hashset.
- Masukkan beberapa elemen dalam hashset.
- Cetak hashset.(Pesanan tidak dipertahankan)
Di bawah ini adalah implementasi dari pendekatan di atas:
Gmamaladze / A_README.md
Banyak orang secara naif menganggap orang biasa .Net Hashset mempertahankan pesanan penyisipan. Memang hashset secara tidak sengaja mempertahankan pesanan penyisipan sampai Anda menghapus dan menambahkan beberapa elemen. Ada struktur data seperti itu di Java – LinkedHashset yang menghormati urutan dan memiliki O (1) RW Times.
Tidak, saya tidak menemukan implementasi (berfungsi) yang sesuai di .BERSIH. Itu saya menulis yang ini.
Implementasi menggunakan daftar tertaut dalam kombinasi dengan kamus untuk menentukan iterasi, pemesanan dan pada saat yang sama memungkinkan O (1) penghapusan.
Pesanannya bukan terpengaruh jika suatu elemen dimasukkan kembali ke dalam set itu mempertahankan posisi lama.
Kode ini didistribusikan di bawah lisensi MIT. Hak Cipta (C) 2013 George Mamaladze Lihat Lisensi.txt atau http: // opensource.org/lisensi/lisensi mit.php
File ini berisi teks unicode dua arah yang dapat ditafsirkan atau disusun secara berbeda dari apa yang muncul di bawah. Untuk meninjau, buka file dalam editor yang mengungkapkan karakter unicode tersembunyi. Pelajari lebih lanjut tentang karakter unicode dua arah
// Kode ini didistribusikan di bawah lisensi MIT. Hak Cipta (C) 2013 George Mamaladze |
// Lihat lisensi.txt atau http: // opensource.org/lisensi/lisensi mit.php |
menggunakan sistem . Koleksi; |
menggunakan sistem . Koleksi . Generik; |
Namespace GMA . Struktur data |
PRESIDEDSET PUBLIK PUBLIK < T >: Icollection |
Idiksi Private Readlyly < T , LinkedListNode < T >> m_dictionary; |
LinkedList Private Readonly < T >m_linkedlist; |
orderedset umum () |
: ini (EqualityComparer < T >. Bawaan ) |
> |
PRESIDEDSET PUBLIK (IEqualityComparer < T >pembanding) |
m_dictionary = kamus baru < T , LinkedListNode < T >> (pembanding); |
m_linkedlist = LinkedList baru < T >(); |
> |
Hitungan int publik |
mendapatkan |
> |
BOOL Virtual Publik ISreadonly |
mendapatkan |
> |
batal icollection < T >. Tambahkan (t item) |
Tambahkan Barang ) ; |
> |
public void clear () |
m_linkedlist . Jernih ( ) ; |
m_dictionary . Jernih ( ) ; |
> |
bool publik hapus (item t) |
LinkedListNode < T >simpul; |
bool ditemukan = m_dictionary . TrygetValue (item, out node); |
jika ( ! ditemukan) mengembalikan false; |
m_dictionary . Hapus (item); |
m_linkedlist . Hapus (node); |
Kembali Benar; |
> |
Ienumerator publik < T >Getenumerator () |
return m_linkedlist . Getenumerator (); |
> |
Ienumerator ienumerable . Getenumerator () |
return getEnumerator (); |
> |
Bool publik berisi (item t) |
kembalikan m_dictionary . BerisiKey (item); |
> |
public void copyto (t [] array, int arrayIndex) |
m_linkedlist . Copyto (array, arrayIndex); |
> |
Public Bool Add (item T) |
if (m_dictionary . Containskey (item)) return false; |
LinkedListNode < T >node = m_linkedlist . AddLast (item); |
m_dictionary . Tambahkan (item, node); |
Kembali Benar; |
> |
> |
> |
File ini berisi teks unicode dua arah yang dapat ditafsirkan atau disusun secara berbeda dari apa yang muncul di bawah. Untuk meninjau, buka file dalam editor yang mengungkapkan karakter unicode tersembunyi. Pelajari lebih lanjut tentang karakter unicode dua arah
// Kode ini didistribusikan di bawah lisensi MIT. Hak Cipta (C) 2013 George Mamaladze |
// Lihat lisensi.txt atau http: // opensource.org/lisensi/lisensi mit.php |
menggunakan sistem; |
menggunakan sistem . Koleksi . Generik; |
menggunakan sistem . Linq; |
Namespace GMA . Struktur data |
PUBLIK PUBLIC ORDEREDSEXT < T >: Orderedset < T >, Aku menyiapkan |
Public orderedsetext () |
> |
orderedsetext publik (IEqualityComparer < T >pembanding) |
: basis (pembanding) |
> |
orderedsetext umum (ienumerable < T >koleksi) |
: ini (koleksi, kesetaraan comparer < T >. Bawaan ) |
> |
orderedsetext umum (ienumerable < T >Koleksi, IequalityComparer < T >pembanding) |
: ini (perbandingan) |
foreach (item t in collection) |
Tambahkan Barang ) ; |
> |
> |
/// |
/// memodifikasi set saat ini sehingga berisi semua elemen yang ada di set saat ini dan di |
/// Koleksi yang ditentukan. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
public void unionwith (Ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
foreach (elemen t di lainnya) |
Tambahkan (elemen); |
> |
> |
/// |
/// memodifikasi set saat ini sehingga hanya berisi elemen yang juga dalam koleksi yang ditentukan. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
public void intersectwith (ienumerable < T >lainnya ) |
foreach (elemen t di lainnya) |
if (mengandung (elemen)) lanjutkan; |
Hapus (elemen); |
> |
> |
/// |
/// menghapus semua elemen dalam koleksi yang ditentukan dari set saat ini. |
/// |
/// Koleksi item yang harus dihapus dari set. |
/// |
kekosongan publik kecuali (ienumerable < T >lainnya ) |
foreach (elemen t di lainnya) |
Hapus (elemen); |
> |
> |
/// |
/// memodifikasi set saat ini sehingga hanya berisi elemen yang ada baik di set saat ini atau di |
/// koleksi yang ditentukan, tetapi tidak keduanya. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
public void symmetricexceptwith (ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
foreach (elemen t di lainnya) |
if (berisi (elemen)) |
Hapus (elemen); |
> |
kalau tidak |
Tambahkan (elemen); |
> |
> |
> |
/// |
/// menentukan apakah set adalah subset dari koleksi yang ditentukan. |
/// |
/// |
/// Benar jika set saat ini adalah subset dari; jika tidak, salah. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
Public Bool Issubsetof (Ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
var OtherHashset = hashset baru < T >( lainnya ) ; |
Kembalikan OtherHashset . Issupersetof (ini); |
> |
/// |
/// menentukan apakah set saat ini adalah superset dari koleksi yang ditentukan. |
/// |
/// |
/// Benar jika set saat ini adalah superset dari; jika tidak, salah. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
Public Bool Isspersetof (Ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
kembali lainnya . Semua (berisi); |
> |
/// |
/// menentukan apakah set saat ini adalah superset yang benar dari koleksi yang ditentukan. |
/// |
/// |
/// true jika objek adalah superset yang benar |
///; jika tidak, salah. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
public bool ispropersupersetof (ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
var OtherHashset = hashset baru < T >( lainnya ) ; |
Kembalikan OtherHashset . IsPropersubsetof (ini); |
> |
/// |
/// menentukan apakah set saat ini adalah subset properti (ketat) dari koleksi yang ditentukan. |
/// |
/// |
/// Benar jika set saat ini adalah subset yang benar; jika tidak, salah. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
BOOL PUBLIK ISPROPERSUBSETOF (Ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
var OtherHashset = hashset baru < T >( lainnya ) ; |
Kembalikan OtherHashset . IsPropersuSetOf (ini); |
> |
/// |
/// menentukan apakah set saat ini tumpang tindih dengan koleksi yang ditentukan. |
/// |
/// |
/// Benar jika set saat ini dan berbagi setidaknya satu elemen umum; jika tidak, salah. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
tumpang tindih bool publik (Ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
if (count == 0) return false; |
kembali lainnya . Apa pun (berisi); |
> |
/// |
/// menentukan apakah set saat ini dan koleksi yang ditentukan berisi elemen yang sama. |
/// |
/// |
/// Benar jika set saat ini sama dengan; jika tidak, salah. |
/// |
/// Koleksi untuk dibandingkan dengan set saat ini. |
/// |
setequals bool publik (ienumerable < T >lainnya ) |
if (lain == null) lempar argumentnullexception baru (“lainnya”); |
var OtherHashset = hashset baru < T >( lainnya ) ; |
Kembalikan OtherHashset . Setequals (ini); |
> |
> |
> |
File ini berisi teks unicode dua arah yang dapat ditafsirkan atau disusun secara berbeda dari apa yang muncul di bawah. Untuk meninjau, buka file dalam editor yang mengungkapkan karakter unicode tersembunyi. Pelajari lebih lanjut tentang karakter unicode dua arah
// Kode ini didistribusikan di bawah lisensi MIT. Hak Cipta (C) 2013 George Mamaladze |
// Lihat lisensi.txt atau http: // opensource.org/lisensi/lisensi mit.php |
#Region menggunakan ruang nama |
menggunakan sistem; |
menggunakan sistem . Koleksi . Generik; |
menggunakan sistem . Globalisasi ; |
menggunakan sistem . Linq; |
Menggunakan Microsoft . Studio visual . TestTools . Unittest; |
#endregion |
Namespace GMA . Struktur data . Tes |
Perintah kelas internal |
public const char pemisah = ‘;’ ; |
Operasi Private Readyly M_Operation; |
private readonly t m_item; |
Komando Publik (Operasi Operasi, Barang T) |
M_Operation = Operasi; |
m_item = item; |
> |
Public Void Execute (iset < T >mengatur ) |
Switch (M_Operation) |
operasi kasus . Menambahkan : |
mengatur . Tambahkan (m_item); |
merusak ; |
operasi kasus . Menghapus : |
mengatur . Hapus (m_item); |
merusak ; |
operasi kasus . Jernih : |
mengatur . Jernih ( ) ; |
merusak ; |
bawaan : |
Lemparkan notsupportedException baru (string . Format (“operasi [] tidak didukung. “, M_Operation)); |
> |
> |
Komando statis publik < T >Parse (token string) |
var prefixchar = token [0]; |
var itemText = token . Substring (1); |
VAR OPERASI = Chartooperation (PrefixChar); |
T item = |
! Rangkaian . IsNullorEmpty (itemText) |
? (T) Konversi . ChangeType (itemText, typeof (t)) |
: default (t); |
Kembalikan perintah baru < T >(Operasi, item); |
> |
Private Static Operation Chartooperation (Char CH) |
Switch (ch) |
case ‘+’: |
operasi pengembalian . Menambahkan ; |
kasus ‘-‘ : |
operasi pengembalian . Menghapus ; |
kasus ‘#’ : |
operasi pengembalian . Jernih ; |
bawaan : |
Lemparkan notsupportedException baru (string . Format (“operasi [] tidak didukung. “, ch)); |
> |
> |
> |
Operasi enum internal |
Menambahkan , |
Menghapus , |
Jernih |
> |
[TestClass] |
PUBLIK PUBLIK PESANDANESTEST |
[TestMethod] |
public void kosong () |
const string input = “”; |
const string diharapkan = “”; |
Testx (input, diharapkan); |
> |
[TestMethod] |
public void add_one () |
input string const = “+1;”; |
const string diharapkan = “1”; |
Testx (input, diharapkan); |
> |
[TestMethod] |
public void add_many () |
input string const = “+1; +2; +3; +4; +5; +6”; |
string const diharapkan = “1; 2; 3; 4; 5; 6”; |
Testx (input, diharapkan); |
> |
[TestMethod] |
public void add_many_then_clear () |
input string const = “+1; +2; +3; +4; +5; +6;#”; |
const string diharapkan = “”; |
Testx (input, diharapkan); |
> |
[TestMethod] |
public void add_many_then_clear_then_add () |
input string const = “+1; +2; +3; +4; +5; +6;#;+4; +3; +2;”; |
const string diharapkan = “4; 3; 2”; |
Testx (input, diharapkan); |
> |
[TestMethod] |
public void adds_and_removes_mixed () |
input string const = “+1; +2; +3; +4; -2; -3; +2; +3; +5”; |
const string diharapkan = “1; 4; 2; 3; 5”; |
Testx (input, diharapkan); |
> |
private void testx (input string, string diharapkan) |
Aku menyiapkan < int >set = new ordeDsetext < int >(); |
Eksekusi (set, input); |
Assertset (diharapkan, set); |
> |
Private Void Assertset < T >(string diharapkan, ienumerable < T >sebenarnya |
var expactedArray = |
mengharapkan |
. Split (perintah < int >. Pemisah) |
. Dimana (s => ! rangkaian . IsNullorEmpty (s)) |
. SELECT (token => konversi . ChangeType (token, typeof (t))) |
. Pemeran < T >(); |
Assertenumerables (ExpactedArray, aktual); |
> |
void statis pribadi assertenumerables < T >(Ienumerable < T >Diharapkan, Ienumerable < T >sebenarnya |
string pemisah = perintah < T >. Pemisah . Tostring (CultureInfo . Invarianculture); |
String diharapkan = string . Bergabunglah (pemisah, diharapkan . Pilih (item => konversi . Tostring (item))); |
string aktualtext = string . Bergabunglah (pemisah, aktual . Pilih (item => konversi . Tostring (item))); |
Menegaskan . Areequal (diharapkantext, ActualText); |
> |
Private Void Execute (iset < int >Set, program string) |
perintah var = |
program |
. Split (perintah < int >. Pemisah) |
. Dimana (s => ! rangkaian . IsNullorEmpty (s)) |
. Pilih (perintah < int >. Parse); |
foreach (perintah var dalam perintah) |
memerintah . Eksekusi (set); |
> |
> |
> |
> |