Set takma siparişini koruyor mu?
Java Set Tutma Siparişi
Standart bir setten farklı olarak, sipariş edilen bir kümedeki verilerin sırası korunur. Program boyunca korunacak verileri girdiğimiz sıraya ihtiyaç duyduğumuzda sipariş edilen setler kullandık. Sipariş edilen bir sette, verilere bakmak, siparişini sıralamasız bir sette olduğu gibi değiştirmez.
Python Sipariş Siparişi: Genel Bakış
Programlama esas olarak verileri işlemekle ilgilidir. Bir Python geliştiricisi olarak, verileri hedeflerinizle tutarlı bir şekilde saklamanın yollarını bulacaksınız. Bazen, bir sette veri ekleme sırasını korumanız gerekir, örneğin, banka işlemlerini yürütüyorsanız. Her işlem benzersiz olmalı ve işlemlerin oluşturulma sırasını korumak önemlidir. Python’un sipariş edilen setleri tam da bunu yapmanıza yardımcı olur.
Bu makalede, bir Python programında nasıl bir tane oluşturacağınızı göstermeden önce sipariş edilmiş bir setin programlama konseptini açıklayacağız.
Python’da set nedir?
Python programlama dilinde, bir set benzersiz unsurların bir koleksiyonudur. Tanımsız eleman siparişine sahip karma tablo tabanlı bir veri yapısıdır. Bir setin öğelerine göz atabilir, ekleyebilir veya kaldırabilir ve Birlik, Kavşak, Tamamlayıcı ve Fark Standart Set İşlemlerini gerçekleştirebilirsiniz.
Listelerin aksine, sıradan kümeler, öğeleri eklediğimiz sırayı korumaz. Bunun nedeni, bir kümedeki öğelerin genellikle göründükleri sırayla saklanmamasıdır.
Sipariş edilen set nedir?
Standart bir setten farklı olarak, sipariş edilen bir kümedeki verilerin sırası korunur. Program boyunca korunacak verileri girdiğimiz sıraya ihtiyaç duyduğumuzda sipariş edilen setler kullandık. Sipariş edilen bir sette, verilere bakmak, siparişini sıralamasız bir sette olduğu gibi değiştirmez.
Python’da Sıralı Set Nasıl Oluşturulur
Python, programlarınızda sıralı setler oluşturmanıza izin verir. Aşağıda bunu yapmanın iki yolunu göstereceğiz: Python’un kullanımı sipariş paket ve manuel bir yöntem. Ama önce bir bağlam oluşturalım. Diyelim ki bir özet belgede işlem numaralarını birbiri ardına kaydetmeniz gereken bir banka için bir uygulama geliştiriyorsunuz. Her banka işlem operasyonu benzersizdir.
Ayrıca, işlemlerin tam olarak veri kümenize yansıtılacak siparişi istiyorsunuz. Bu, kullanmanız için mükemmel bir fırsat Sipariş Python’s’ta sınıf siparişed_set paketi.
Python’un Siparişi Set Sınıfı
Python’da düzenli bir set oluşturmanın en basit yolu, OrderedSet sınıfını kullanmaktır. Bu sınıfın varsayılan olarak dahil olmadığını unutmayın. Önce sahip olduğunuzdan emin olmalısınız sipariş Paket yüklü.
Dikkat sipariş üçüncü taraf bir pakettir ve işlevselliği, kullandığınız Python sürümünden bağımsız olarak değişebilir. Paketi yüklemek için, terminalinize aşağıdaki komutu yazın:
pip yükleme siparişi seti
Bu, OrdedSet sınıfını kullanmanızı sağlayacaktır.
Şimdi, OrdedSet sınıfını kullanan bir Python programı oluşturabilirsiniz. Bakalım basit bir sıralı setin nasıl göründüğü:
ordered_set ithalat upprededSet settest = ordedset (["ilk", "ikinci", "ikinci", "üçüncü"]) print (settest)
İlk olarak, taze yüklü Siparişler Paketini içe aktarıyoruz. Ardından, üyeleri parametre olarak geçiren sipariş sınıfından bir nesne oluşturuyoruz. Bu örnekteki baskı deyimi aşağıdakileri çıkarır:
Ordedset (['ilk', 'ikinci', 'üçüncü'])
Seti oluştururken iki kez girdiğimiz ‘ikinci’ dize şimdi gitti, veri girdiğimiz sıraya göre korunur.
Şimdi, sıralı bir banka işlemi seti oluşturalım. Gerçek dünya senaryosunda, işlemleri analiz etmenize, dolandırıcılığı kontrol etmenize izin vermek için ekleme sırasını yerinde tutmak istersiniz, vb. Program nasıl görünebilir:
orded_set içe aktarma ordededSet BankStatement = ordedSet (["BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]).
Sipariş edilen set oluşturuldu.
Şimdi, belirli bir işlem yapmak istiyorsanız, dizinini kullanarak ilgili öğe kümesini seçebilirsiniz:
. Baskı ("İşlem Hayır", Bankstatement [1], "başarıyla kaydedildi")
Bu size aşağıdaki çıktıyı verir:
İşlem BK0002 başarıyla kaydedilmedi
Ama ya birisi ‘BK0004’ gibi daha önce kaydedilmiş bir işlem eklemek istiyorsa? Bir liste kullansaydık, bu eylem mümkün olurdu. Neyse ki, sipariş edilen set buna izin vermiyor. Aşağıdaki kodu çalıştıralım:
Bankalar.Ekle ("BK0004") Print (Banktrs)
Baskı ifadesinin sonucu değişmeden kalır ve sipariş edilen setin eylemi göz ardı ettiğini kanıtlar:
OrdedSet (['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005'])
Bu özellik bu durumda özellikle yararlıdır. Bir programcı olarak, her veri üyesinin benzersiz olmasını sağlamak konusunda endişelenmenize gerek kalmayacak.
Sıralı set paketinde diğer kayda değer özellikler. Operatörleri kullanarak fark, kavşak ve birlik gibi yararlı işlemler yapmanızı sağlar -, & ve |.
Operasyonları ayarlayın
İki banka beyanını temsil edebilecek iki farklı sıralı set oluşturmak için programı yeniden yazalım.
ordered_set ithalated reglededSet bankstatement1 = ordededSet1 (["BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]) BankStatement2 = ordedSet2 (["BK0005", "BK0005", "BK0008", "BK0008"]
Her iki ifadeye de BK0004 ve BK0005 işlemlerini kasten dahil ettik. Birincisi ve
1. Python’da sipariş edilen bir setin amacı nedir?
Python’da düzenli bir set, banka işlemlerini işleme gibi senaryolarda önemli olan veri ekleme sırasını korumak için kullanılır.
2. Bir set Python’da sipariş edilen bir setten nasıl farklıdır??
Python’daki bir set, elemanların sırasını korumazken, sipariş edilen bir set.
3. Python’da sıralı bir set nasıl oluşturabilirsiniz?
Python’da Sipariş Verilen Paketten Siparişi Sınıfını kullanarak Sipariş Edilmiş Bir Set oluşturabilirsiniz. İlk olarak, paketin yüklü olduğundan emin olun, ardından sınıfı içe aktarın ve istenen öğelerle bir nesne oluşturun.
4. Sipariş edilen bir sete yinelenen bir öğe eklemeye çalışırsanız ne olur?
Sipariş edilen bir set, yinelenen öğelere izin vermez, bu nedenle bir yinelenen öğe eklemeye çalışmak kümeyi değiştirmez.
5. Python’da sipariş edilmiş bir set kullanmanın bazı avantajları nelerdir??
Sipariş edilmiş bir set kullanmanın bir avantajı, otomatik olarak kopyaları işlediği için benzersiz öğeler sağlamak konusunda endişelenmenize gerek yoktur. Ayrıca, verilerin analiz edilmesi ve işlenmesi için yararlı olabilecek veri ekleme sırasını korur.
6. Siparişli bir setle Birlik ve Kavşak gibi set operasyonlarını gerçekleştirebilir misiniz??
Evet, sıralı set paketi, operatörleri kullanarak fark, kavşak ve birlik gibi ayarlanmış işlemleri gerçekleştirmenizi sağlar -&, ve |.
7. Sıralı bir setteki belirli öğelere nasıl erişebilirsiniz??
Bir listedeki öğelere erişmeye benzer şekilde, öğenin dizinini kullanarak sipariş edilen bir sette belirli öğelere erişebilirsiniz.
8. Python’da varsayılan olarak dahil edilen sipariş sınıfı?
Hayır, Ordedset sınıfı varsayılan olarak Python’a dahil edilmez. Sıralı set paketini kullanmak için yüklemeniz gerekir.
9. Sıralı set paketinin işlevselliği, Python sürümünden bağımsız olarak değişebilir mi??
Evet, sipariş edilen set paketinin işlevselliği, kullandığınız Python sürümünden ayrı. Bağımsız olarak güncellenebilen ve değiştirilebilen bir üçüncü taraf paket.
10. Python’a sipariş edilen paketi nasıl yükleyebilirsiniz??
Terminalinizdeki PIP komutunu kullanarak Python’da sipariş edilen paketi Python’a yükleyebilirsiniz:.
Java Set Tutma Siparişi
Standart bir setten farklı olarak, sipariş edilen bir kümedeki verilerin sırası korunur. Program boyunca korunacak verileri girdiğimiz sıraya ihtiyaç duyduğumuzda sipariş edilen setler kullandık. Sipariş edilen bir sette, verilere bakmak, siparişini sıralamasız bir sette olduğu gibi değiştirmez.
Python Sipariş Siparişi: Genel Bakış
Programlama esas olarak verileri işlemekle ilgilidir. Python geliştiricisi olarak’Verileri hedeflerinizle tutarlı bir şekilde saklamanın yollarını bulacak. Bazen sen’Örneğin, banka işlemlerini yürütüyorsanız, bir küme veri ekleme sırasını korumanız gerekir. Her işlem benzersiz olmalı ve işlemlerin oluşturulma sırasını korumak önemlidir. Python’S sipariş setleri tam da bunu yapmanıza yardımcı olur.
Bu makalede, bir Python programında nasıl bir tane oluşturacağınızı göstermeden önce sipariş edilmiş bir setin programlama konseptini açıklayacağız.
Python’da set nedir?
Python programlama dilinde, bir set benzersiz unsurların bir koleksiyonudur. Tanımsız eleman siparişine sahip karma tablo tabanlı bir veri yapısıdır. Bir sete göz atabilirsiniz’S öğeleri, bunları ekleyin veya kaldırın ve Birlik, Kavşak, Tamamlayıcı ve Fark Standart Set İşlemlerini gerçekleştirin.
Listelerin aksine, sıradan kümeler, öğeleri eklediğimiz sırayı korumaz. Bunun nedeni, bir kümedeki öğelerin genellikle göründükleri sırayla saklanmamasıdır.
Sipariş edilen set nedir?
Standart bir setten farklı olarak, sipariş edilen bir kümedeki verilerin sırası korunur. Program boyunca korunacak verileri girdiğimiz sıraya ihtiyaç duyduğumuzda sipariş edilen setler kullandık. Sipariş edilen bir sette, verilere bakmak, siparişini sıralamasız bir sette olduğu gibi değiştirmez.
Python’da Sıralı Set Nasıl Oluşturulur
Python, programlarınızda sıralı setler oluşturmanıza izin verir. Aşağıda’Bunu yapmanın iki yolunu gösterecek: Python’u kullanmak’S sipariş paket ve manuel bir yöntem. Ama önce izin ver’bir bağlam oluştur. İzin vermek’Seni söyle’Özet bir belgede işlem numaralarını birbiri ardına kaydetmeniz gereken bir banka için bir uygulama geliştirme. Her banka işlem operasyonu benzersizdir.
Ayrıca, işlemlerin tam olarak veri kümenize yansıtılacak siparişi istiyorsunuz. Bu, kullanmanız için mükemmel bir fırsat Sipariş Python’da sınıf dahil’S siparişed_set paketi.
Python’S Sıralı Set Sınıfı
Python’da düzenli bir set oluşturmanın en basit yolu, OrderedSet sınıfını kullanmaktır. Bu sınıfın varsayılan olarak dahil olmadığını unutmayın. Önce sahip olduğunuzdan emin olmalısınız sipariş Paket yüklü.
Dikkat sipariş üçüncü taraf bir pakettir ve işlevselliği, Python’un versiyonundan bağımsız olarak değişebilir’yeniden kullanmak. Paketi yüklemek için, terminalinize aşağıdaki komutu yazın:
pip yükleme siparişi seti
Bu, OrdedSet sınıfını kullanmanızı sağlayacaktır.
Şimdi, OrdedSet sınıfını kullanan bir Python programı oluşturabilirsiniz. İzin vermek’Sıralı bir setin nasıl göründüğünü görün:
ordered_set ithalat upprededSet settest = ordedset (["ilk", "ikinci", "ikinci", "üçüncü"]) print (settest)
İlk olarak, taze yüklü Siparişler Paketini içe aktarıyoruz. Ardından, üyeleri parametre olarak geçiren sipariş sınıfından bir nesne oluşturuyoruz. Bu örnekteki baskı deyimi aşağıdakileri çıkarır:
Ordedset (['ilk', 'ikinci', 'üçüncü'])
Dize ‘Saniye’ Seti oluştururken iki kez girdiğimiz artık gitti, veri girdiğimiz sıraya girerken.
Şimdi izin ver’S Sıralı bir banka işlemi seti oluşturun. Gerçek dünya senaryosunda, işlemleri analiz etmenize, dolandırıcılığı kontrol etmenize izin vermek için ekleme sırasını yerinde tutmak istersiniz, vb. Program nasıl görünebilir:
orded_set içe aktarma ordededSet BankStatement = ordedSet (["BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]).
Sipariş edilen set oluşturuldu.
Şimdi, belirli bir işlem yapmak istiyorsanız, dizinini kullanarak ilgili öğe kümesini seçebilirsiniz:
. Baskı ("İşlem Hayır", Bankstatement [1], "başarıyla kaydedildi")
Bu size aşağıdaki çıktıyı verir:
İşlem BK0002 başarıyla kaydedilmedi
Peki ya birisi daha önce kaydedilmiş bir işlem eklemek istiyorsa, “BK0004”? Bir liste kullansaydık, bu eylem mümkün olurdu. Neyse ki, sipariş edilen set buna izin vermiyor. İzin vermek’S Aşağıdaki kodu çalıştırın:
Bankalar.Ekle ("BK0004") Print (Banktrs)
Baskı ifadesinin sonucu değişmeden kalır ve sipariş edilen setin eylemi göz ardı ettiğini kanıtlar:
OrdedSet (['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005'])
Bu özellik bu durumda özellikle yararlıdır. Bir programcı olarak kazandın’Her veri üyesinin benzersiz olmasını sağlamak konusunda endişelenmelisiniz.
Sıralı set paketinde diğer kayda değer özellikler. Operatörleri kullanarak fark, kavşak ve birlik gibi yararlı işlemler yapmanızı sağlar -, & & Ve |.
Operasyonları ayarlayın
İzin vermek’İki banka ekstresini temsil edebilecek iki farklı sıralı set oluşturmak için programı yeniden yazın.
ordered_set ithalated reglededSet bankstatement1 = ordededSet1 (["BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]) BankStatement2 = ordedSet2 (["BK0005", "BK0005", "BK0008", "BK0008"]
Her iki ifadeye de BK0004 ve BK0005 işlemlerini kasten dahil ettik. Birinci ve ikinci ifade kısmen aynı zaman dilimini kapsarsa durum böyle olabilir.
Yalnızca BankStatement1’de var olan işlemleri görmek istiyorsanız, aşağıdaki kod bitini çalıştırın:
diff = BankStatement1 - BankStatement2 Print ("İlk özete özgü işlemler", Diff)
Bu bize aşağıdaki sonucu verir:
İlk özete özgü işlemler sipariş verilir (['BK0001', 'BK0002', 'BK0003'])
Okunabilirlik amacıyla, verileri bu kodu kullanarak görüntülerken bir liste içindeki sıralı kümeyi dahil edebiliriz:
diff = BankStatement1 - BankStatement2 Print ("İlk özete özgü işlemler", Liste (Fark))
Şimdi, yalnızca her iki ifadede de var olan işlemleri almanız gerekiyorsa, kesişme ifadesini böyle kullanın:
Inter = BankStatement1 & BankStatement2 Print ("Her iki özet için ortak işlemler", liste (inter))
Sen’Amaçlanan sonucu alacak:
Her iki özet için ortak olan işlemler sipariş verilir ['BK0004', 'BK0005']
Son olarak, her iki ifadenin tüm işlemlerini görmek istiyorsanız, sendika işlemini gerçekleştirin:
Union = BankStatement1 | BankStatement2 baskı ("İşte bu özetlerin tüm işlemleri:", lis (Union))
Bu size aşağıdaki çıktıyı verecektir:
İşte bu özetlerin tüm işlemleri: Ordedset ['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005', 'BK0006', 'BK0007', 'BK0008']
Sipariş edilen_set paketi, Python’daki sipariş setlerinin oluşturulmasını ve manipüle edilmesini basit ve etkili hale getirir.
Manuel yöntem
Sıralı bir veri kümesi tamamen manuel olarak oluşturmak da mümkündür. Sıralı set paketi kullanamıyorsanız, yine de bu geçici çözümü kullanabilirsiniz. İzin vermek’Bu yöntemin nasıl çalıştığını görün.
Önce biz’Veri kümemizi içeren bir dize dizisi oluşturun:
BankStatement = ["BK0001", "BK0002", "BK0003", "BK0004", "BK0004", "BK0005", "BK0006"]
Ardından, her öğeyi kontrol eden, kopyalar arayan bir for döngü oluştururuz. Eğer varsa, setten çıkarılacaklar. Bunu test etmek için biz’Kasıtlı olarak diziye yinelenen bir öğe ekleyin.
Range (Len (BankStatement), 1, -1) dize için: Bankstatement [: String-1] 'de BankStatement [String-1]: BankStatement.Pop (String-1)
For döngü listenin arkasından, yani son öğeden yinelemeye başlar. Bu öğeyi (yukarıdaki dize olarak adlandırılır) alır ve listenin alt kümesinde zaten mevcut olup olmadığını kontrol eder Ancak Geçerli öğeyi (String) dahil etmeyin. Zaten mevcutsa, listenin önüne daha yakın öğenin sözünü kaldırıyoruz, ancak öğenin orijinal sözünü listenin arkasına yakın tutuyoruz.
Şimdi, dizi içeriğini yazdırdığımızda, kopya yok ve sipariş korunuyor:
['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005', 'BK0006']
Bu, Python’u kullanamasak bile sıralı bir set oluşturmamızı sağlar’S adlı özelliği!
Çevrimiçi kodlamayı öğrenin
Python, sıralı setler oluşturmak için birkaç seçeneğe sahip çok yönlü bir programlama dilidir. İşi halletmek için sipariş sınıfını kullanabilirsiniz veya gerekirse bunu manuel olarak yapabilirsiniz.
Python’da sipariş edilen set oluşturmanın ötesine geçmek istiyorum?
Udacity’S Programlama Programlama Programına Giriş Programı Bir sonraki adımınızdır. Bu kursun sonunda sen’Kodlamanın temellerini bilir ve HTML, CSS, Python ve daha fazlasını kullanarak gerçek dünyadaki programlama senaryolarını güvenle yönetme becerilerine sahiptir!
Komple kod örnekleri
Örnek 1: Banka İşlem Siparişi Set oluşturma
ordered_set ithalat seardedSet BankStatement = ordededSet (["BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]) Print ("İşlem No", BankStatement [1], "başarıyla kaydedildi") Banktrs.Ekle ("BK0004") Print (Banktrs)
Örnek 2: Farke, Birlik, Kavşak
ordered_set ithalated seardedSet BankStatement1 = ordededset (["BK0001", "BK0002", "BK0004", "BK0005", "BK0005", "BK0005", "Bk0006", "Bk0006", "Bankstatctionlar", "BkStating", "BkStating", "BkStating -" BkStating "," Bk0006 "]," Bk0006 "]," Bk0006 "]," BK0006 "]," BK0006 "], İlk özet ", liste (diff)) inter = bankStatement1 & BankStatement2 baskı (" Her iki özet için ortak işlemler ", liste (inter)) Union = BankStatement1 | BankStatement2 baskı ("İşte bu özetlerin tüm işlemleri:", Liste (Union))
Örnek 3: Manuel yöntem
BankStatement = ["BK0001", "BK0002", "BK0003", "BK0004", "BK0004", "BK0005", "BK0006"] Range (len (BankStatement), 1, -1): BankStatement [String-1] If Bankastatement [: String-1]:.POP (String-1) Print (BankStatement)
Java Set Tutma Siparişi?
Bir Java Set Siparişi Sıra? Bir yöntem bana bir seti döndürüyor ve sözde veriler sipariş ediliyor, ancak setin üzerinde yineleniyor, veriler düzenlenmedi. Bunu yönetmenin daha iyi bir yolu var mı? Bir setten başka bir şeyi döndürmek için yöntemin değiştirilmesi gerekiyor mu??
30.6K 27 27 Altın Rozetler 91 91 Gümüş Rozetler 100 100 Bronz Rozetler
25 Mayıs 2012’de 10:27 soruldu
USER840930 USER840930
5.084 21 21 Altın Rozetler 62 62 Gümüş Rozetler 93 93 Bronz Rozetler
“Elemanlar belirli bir sırayla iade edilmez (bu set, garanti sağlayan bir sınıfın bir örneği olmadığı sürece).”Bir set için yineleyici yöntemi. Burada bulundu
25 Mayıs 2012, 10:29
13 Cevaplar 13
Set arayüzü herhangi bir sipariş garantisi sağlamaz.
Alt arazisi sıralaması, bazı kriterlere göre sıralanan bir kümeyi temsil eder. Java 6’da, sıralı set uygulayan iki standart kap vardır . Onlar treeset ve eşzamanlı .
SimedSet arayüzüne ek olarak, LinkedHashset sınıfı da var. Elemanların sete sokulma sırasını hatırlar ve öğelerini bu sırayla döndürür.
10.9K 10 10 Altın Rozetler 70 70 Gümüş Rozetler 94 94 Bronz Rozetler
25 Mayıs 2012’de 10:30
483K 107 107 Altın Rozetler 943 943 Gümüş Rozetler 1007 1007 Bronz Rozetler
Ayrıca, Java 8’deki farklı dize karması nedeniyle, setlerde ve haritalarda varsayılan (ayrılmamış) sipariş değişecektir. Çıkmamış siparişe güveniyorsanız, kodunuz Java 8 altında farklı davranacaktır.
17 Kasım 2014, 16:15
Sipariş vermeyen sınıfın normal olduğunu anlıyorum, ancak beklediğim davranış, onları tanıtıldıkları gibi bırakmak ve siparişle uğraşmaktı, bunun yerine her toplandığında sadece unsurları karıştırıyor. Çözümünüz optimal değil çünkü o zaman onların tanıtıldığı gibi sıralanmaları için bütün bir yapı uygulamam gerekecek: S
25 Şub 2019, 8:39
@White_king: Bir set, “ekleme emri” kavramını içermeyen matematiksel bir kavramdır, bu nedenle Java arayüzünün sözleşmelerini takip etmesi mantıklıdır. Sipariş edilen setler vardır, ancak sipariş bir ilişki (Java’daki karşılaştırıcı) ile belirtilir, yine set teorisindeki tanımı Java’daki tanımla eşleştirir. Ekleme siparişini tutma beklentiniz muhtemelen listelerden gelir, ancak setler listeler değildir.
9 Ağu 2019, 10:53
4.396 11 11 Altın Rozet 34 34 Gümüş Rozet 58 58 Bronz Rozetler
25 Mayıs 2012’de 10:29
xiaofeng.Li XiaoFeng.Li
8,117 2 2 Altın Rozet 23 23 Gümüş Rozetler 30 30 Bronz Rozetler
Bir liste bir set değildir (üyeliğin benzersizliğini garanti etmez).
6 Haz 2013, 22:03
Birçok işletmede benzersiz durumlar listesi, sadece ayar yerine siparişi korumak için kullanılamaz. LinkedHashset siparişini korur ve benzersiz depolar.
9 Tem 2015, 15:34
Üyelerin çoğunun önerdiği gibi Linkedhashset Koleksiyonun sırasını korumak için. Bu uygulamayı kullanarak setinizi sarabilirsiniz.
Sırtlı Uygulama sıralı sipariş için kullanılabilir, ancak amacınız için kullanılabilir Linkedhashset.
Ayrıca dokümanlardan,
“Bu uygulama, müşterilerini, Treeset ile ilişkili artan maliyete girmeden, Hashset tarafından sağlanan belirtilmemiş, genellikle kaotik siparişten çıkarır. Orijinal setin uygulamasına bakılmaksızın, orijinal ile aynı siparişe sahip bir setin bir kopyasını üretmek için kullanılabilir: “
Set takma siparişini koruyor mu?
Elemanlar Hashset’ten aldığında, takıldıkları emir verdikleri sırada korunmaz. Hashset, Hashing adlı bir mekanizma kullanarak öğeleri saklar. LinkedHashset kullanarak verilen görevi başarabiliriz. LinkedHashset sınıfı, tüm öğelerden geçebilmesi için iki kat bağlantılı bir liste uygular.
Örnek:
Giriş: HashsetInput = Çıktı: HashsetPrint = Giriş: HashsetInput = Çıktı: HashsetPrint =
Hashset ile Uygulama: (Sipariş Bakımlanmadı)
Sözdizimi:
Hashset num = yeni Hashset ();
Yaklaşmak:
- Hashset nesnesi oluştur.
- Hashset’e birden çok öğe ekleyin.
- Hashset’i yazdır.(Sipariş verilmez)
Aşağıda yukarıdaki yaklaşımın uygulanmasıdır:
Gmamaladze / A_README.MD
Birçok insan saf bir şekilde sıradan bir .Net Hashset Koruyucu Ekleme Siparişi. Gerçekten de Hashset, bazı unsurları kaldırıp yeniden ekleyene kadar yerleştirme siparişini yanlışlıkla korur. Java’da böyle bir veri yapısı var – LinkedHashSet’e, sıraya saygı duyan ve O (1) RW TEMS.
Hayır, (çalışan) ilgili bir uygulama bulamadım .AÇIK. Bunu yazdım.
Uygulama, yinelemeyi, siparişi tanımlamak için sözlükle birlikte bağlantılı listeyi kullanır ve aynı zamanda O (1) kaldırılmasına izin verir.
Sipariş Olumsuz Bir öğe ise etkilenir yeniden yerleştirilmiş Setin içine eski pozisyonunu korur.
Bu kod MIT lisansı altında dağıtılır. Telif Hakkı (C) 2013 George Mamaladze Lisans Bkz.txt veya http: // opensource.org/lisanslar/MIT-lisans.PHP
Bu dosya, aşağıda görünenden farklı yorumlanabilen veya derlenebilen çift yönlü Unicode metni içerir. İncelemek için dosyayı Gizli Unicode karakterlerini ortaya çıkaran bir düzenleyicide açın. Çift yönlü Unicode karakterleri hakkında daha fazla bilgi edinin
// Bu kod MIT lisansı altında dağıtılır. Telif Hakkı (C) 2013 George Mamaladze |
// Lisansa bakın.txt veya http: // opensource.org/lisanslar/MIT-lisans.PHP |
Sistemi Kullanma . Koleksiyonlar; |
Sistemi Kullanma . Koleksiyonlar . Genel ; |
Ad alanı GMA . Veri yapıları |
public class ordedset < T >: İcollection |
özel okunan IDictionary < T , LinkedListNode < T >> m_dictionary; |
Özel Readonly LinkedList < T >M_LinkedList; |
public ordedSet () |
: bu (EqualityComparer < T >. Varsayılan ) |
> |
public ordedset (IequalityComparer < T >karşılaştırıcı) |
m_dictionary = yeni sözlük < T , LinkedListNode < T >> (karşılaştırma); |
m_linkedlist = new linkedlist < T >(); |
> |
Public int sayısı |
elde etmek |
> |
Halka açık sanal bool Isreadonly |
elde etmek |
> |
boşluk < T >. Ekle (T öğesi) |
Öğe eklemek ) ; |
> |
genel boşluk net () |
M_Linkedlist . Temizlemek ( ) ; |
m_dictionary . Temizlemek ( ) ; |
> |
public bool kaldır (t öğesi) |
LinkedListNode < T >düğüm; |
Bool Bulundu = M_Dictionary . TryGetValue (öğe, dış düğüm); |
eğer ( ! Bulundu) geri dönüş yanlış; |
m_dictionary . Öğeyi kaldırmak ) ; |
M_Linkedlist . Kaldır (düğüm); |
true döndür; |
> |
halka açık < T >GetEnumerator () |
return m_linkedlist . GetEnumerator (); |
> |
IEnumerator IEnumable . GetEnumerator () |
return getEnumerator (); |
> |
public bool içerir (t öğesi) |
dönüş m_dictionary . ContainsKey (öğe); |
> |
genel geçersiz kopya (t [] dizisi, int arrayIndex) |
M_Linkedlist . Copyto (dizi, ArrayIndex); |
> |
public bool eklenti (t öğesi) |
if (m_dictionary . ContainsKey (öğe)) false; |
LinkedListNode < T >düğüm = m_linkedlist . Addlast (öğe); |
m_dictionary . Ekle (öğe, düğüm); |
true döndür; |
> |
> |
> |
Bu dosya, aşağıda görünenden farklı yorumlanabilen veya derlenebilen çift yönlü Unicode metni içerir. İncelemek için dosyayı Gizli Unicode karakterlerini ortaya çıkaran bir düzenleyicide açın. Çift yönlü Unicode karakterleri hakkında daha fazla bilgi edinin
// Bu kod MIT lisansı altında dağıtılır. Telif Hakkı (C) 2013 George Mamaladze |
// Lisansa bakın.txt veya http: // opensource.org/lisanslar/MIT-lisans.PHP |
Sistemi kullanmak; |
Sistemi Kullanma . Koleksiyonlar . Genel ; |
Sistemi Kullanma . Linq; |
Ad alanı GMA . Veri yapıları |
public class siparişedsetext < T >: Ordedset < T >, İzet |
public ordedSetExt () |
> |
public ordedSetExt (IequalityComparer < T >karşılaştırıcı) |
: taban (karşılaştırma) |
> |
public ordedSetExt (iEnumable < T >Toplamak ) |
: this (koleksiyon, EqualityComparer < T >. Varsayılan ) |
> |
public ordedSetExt (iEnumable < T >Koleksiyon, IequalityComparer < T >karşılaştırıcı) |
: bu (karşılaştırıcı) |
foreach (koleksiyondaki öğe) |
Öğe eklemek ) ; |
> |
> |
/// |
/// Geçerli kümeyi, hem geçerli kümede hem de mevcut olan tüm öğeleri içerecek şekilde değiştirir |
/// Belirtilen koleksiyon. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
Kamu Geçersiz Birliği (IEnumable < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
foreach (diğerlerinde t öğesi) |
Ekle (element); |
> |
> |
/// |
/// Geçerli kümeyi, yalnızca belirli bir koleksiyonda olan unsurları içerecek şekilde değiştirir. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
Kamu boşluğu ile kesişebilir (IEnumable < T >diğer ) |
foreach (diğerlerinde t öğesi) |
((Element) içeriyorsa) devam ederse; |
Kaldır (eleman); |
> |
> |
/// |
/// Belirtilen koleksiyondaki tüm öğeleri geçerli setten kaldırır. |
/// |
/// Setten kaldırılacak öğelerin koleksiyonu. |
/// |
dışında halka açık boşluk (iEnumable < T >diğer ) |
foreach (diğerlerinde t öğesi) |
Kaldır (eleman); |
> |
> |
/// |
/// Geçerli kümeyi, yalnızca geçerli kümede veya |
/// Belirtilen koleksiyon, ancak her ikisi de değil. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
genel boşluk simetrexceptwith (iEnumable < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
foreach (diğerlerinde t öğesi) |
if ((element) içerir) |
Kaldır (eleman); |
> |
başka |
Ekle (element); |
> |
> |
> |
/// |
/// Bir setin belirli bir koleksiyonun alt kümesi olup olmadığını belirler. |
/// |
/// |
/// Geçerli kümenin bir alt kümesiyse true; Aksi takdirde, yanlış. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
public bool issubsetof (iEnumable < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
Var başkahashset = yeni Hashset < T >( diğer ) ; |
Diğerhashset’i iade et . Issupersetof (bu); |
> |
/// |
/// Mevcut setin belirli bir koleksiyonun üst kümesi olup olmadığını belirler. |
/// |
/// |
/// Mevcut kümenin bir süper kümesiyse doğru; Aksi takdirde, yanlış. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
public bool issupersetof ( < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
Diğer Dön . Hepsi (içerir); |
> |
/// |
/// Mevcut setin belirli bir koleksiyonun doğru bir üst kümesi olup olmadığını belirler. |
/// |
/// |
/// Nesne doğru bir üst düzey ise doğru |
///; Aksi takdirde, yanlış. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
public bool ispropersupersetof ( < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
Var başkahashset = yeni Hashset < T >( diğer ) ; |
Diğerhashset’i iade et . ISPropersubSetof (bu); |
> |
/// |
/// Mevcut kümenin belirli bir koleksiyonun özellik (katı) alt kümesi olup olmadığını belirler. |
/// |
/// |
/// Geçerli kümenin doğru bir alt kümesi ise doğru; Aksi takdirde, yanlış. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
public bool ispropersubsetof ( < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
Var başkahashset = yeni Hashset < T >( diğer ) ; |
Diğerhashset’i iade et . Ispropersupersetof (bu); |
> |
/// |
/// Mevcut setin belirtilen koleksiyonla örtüşüp örtüşüp geçmediğini belirler. |
/// |
/// |
/// Geçerli küme ve en az bir ortak öğeyi paylaşıyorsa true; Aksi takdirde, yanlış. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
genel bool örtüşmeler (IEnumable < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
(Count == 0) false döndürürse; |
Diğer Dön . Herhangi bir (içerir); |
> |
/// |
/// Geçerli kümenin ve belirtilen koleksiyonun aynı öğeleri içerip içermediğini belirler. |
/// |
/// |
/// Geçerli küme eşitse doğru; Aksi takdirde, yanlış. |
/// |
/// Mevcut setle karşılaştırılacak koleksiyon. |
/// |
genel bool set eşitleri (iEnumable < T >diğer ) |
eğer (diğer == null) yeni argumentNullexception (“diğer”) atarsa; |
Var başkahashset = yeni Hashset < T >( diğer ) ; |
Diğerhashset’i iade et . SetEquals (bu); |
> |
> |
> |
Bu dosya, aşağıda görünenden farklı yorumlanabilen veya derlenebilen çift yönlü Unicode metni içerir. İncelemek için dosyayı Gizli Unicode karakterlerini ortaya çıkaran bir düzenleyicide açın. Çift yönlü Unicode karakterleri hakkında daha fazla bilgi edinin
// Bu kod MIT lisansı altında dağıtılır. Telif Hakkı (C) 2013 George Mamaladze |
// Lisansa bakın.txt veya http: // opensource.org/lisanslar/MIT-lisans.PHP |
#bölge kullanılmış ad alanları |
Sistemi kullanmak; |
Sistemi Kullanma . Koleksiyonlar . Genel ; |
Sistemi Kullanma . Küreselleşme ; |
Sistemi Kullanma . Linq; |
Microsoft’u Kullanma . Görsel stüdyo . TestTools . Unittesting; |
#endregion |
Ad alanı GMA . Veri yapıları . Ölçek |
dahili sınıf komutu |
public const char ayırıcı = ‘;’ ; |
Özel Readonly Operasyonu M_OPERATION; |
özel okunan t m_item; |
genel komuta (işlem işlemi, t öğesi) |
m_operation = işlem; |
m_item = öğe; |
> |
genel boşluk yürütme (ISET < T >ayarlamak ) |
Anahtar (M_OPERATION) |
vaka işlemi . Eklemek : |
ayarlamak . Ekle (m_item); |
kırmak ; |
vaka işlemi . Kaldırmak : |
ayarlamak . Kaldır (m_item); |
kırmak ; |
vaka işlemi . Temizlemek : |
ayarlamak . Temizlemek ( ) ; |
kırmak ; |
varsayılan : |
Yeni NotSupportedException atın (String . Biçim (“Operasyon [] desteklenmiyor. “, m_operation)); |
> |
> |
genel statik komut < T >Ayrıştırma (Dize jetonu) |
var prefixchar = jeton [0]; |
var itemText = jeton . Substring (1); |
var operasyon = chartoOperation (prefixchar); |
T Öğe = |
! Sicim . IsnullorEmpty (ItemText) |
? (T) Dönüştürme . Changetype (ItemText, Typeof (t)) |
: varsayılan (t); |
Yeni komutu döndür < T >(işlem, öğe); |
> |
Özel Statik Operasyon Chartooperation (Char CH) |
Anahtar (CH) |
Case ‘+’: |
Dönüş İşlemi . Eklemek ; |
dava ‘-‘ : |
Dönüş İşlemi . Kaldırmak ; |
dava ‘#’ : |
Dönüş İşlemi . Temizlemek ; |
varsayılan : |
Yeni NotSupportedException atın (String . Biçim (“Operasyon [] desteklenmiyor. “, ch)); |
> |
> |
> |
Dahili Dönem İşlemi |
Eklemek , |
Kaldırmak , |
Temizlemek |
> |
[TestClass] |
public class sipariş en iyi |
[ Test metodu ] |
Halka açık boş () |
const dize girişi = “”; |
const string beklenen = “”; |
TestX (giriş, beklenen); |
> |
[ Test metodu ] |
public void add_one () |
const dize girişi = “+1;”; |
const string beklenen = “1”; |
TestX (giriş, beklenen); |
> |
[ Test metodu ] |
public void add_many () |
const dize girişi = “+1; +2; +3; +4; +5; +6”; |
const string beklenen = “1; 2; 3; 4; 5; 6”; |
TestX (giriş, beklenen); |
> |
[ Test metodu ] |
public void add_many_then_clear () |
const dize girişi = “+1; +2; +3; +4; +5; +6;#”; |
const string beklenen = “”; |
TestX (giriş, beklenen); |
> |
[ Test metodu ] |
public void add_many_then_clear_then_add () |
const dize girişi = “+1; +2; +3; +4; +5; +6;#;+4; +3; +2;”; |
const string beklenen = “4; 3; 2”; |
TestX (giriş, beklenen); |
> |
[ Test metodu ] |
public void adds_and_removes_mixed () |
const dize girişi = “+1; +2; +3; +4; -2; -3; +2; +3; +5”; |
const string beklenen = “1; 4; 2; 3; 5”; |
TestX (giriş, beklenen); |
> |
özel void testx (dize girişi, dize beklenen) |
İzet < int >set = new ordedSetExt < int >(); |
Yürütme (ayar, giriş); |
Assertset (beklenen, ayarlanmış); |
> |
özel boşluk assertset < T >(Dize Beklenebilir, IEnumable < T >gerçek ) |
var expactedArray = |
beklenen |
. Split (komut < int >. Ayırıcı) |
. Nerede (s => ! sicim . IsnullorEmpty (ler)) |
. Seç (jeton => dönüştür . Changetype (jeton, typeof (t))) |
. Döküm < T >(); |
AsserTenumerables (expactedArray, gerçek); |
> |
Özel Statik Void AsserTenumerables < T >(INUMUMEBLE < T >beklenen, < T >gerçek ) |
Dize ayırıcı = komut < T >. Ayırıcı . ToString (CultureInfo . Değişmez kültür); |
String Beklenen STEXT = String . Katıl (Ayırıcı, Beklenen . SEÇ (ITEA => Dönüştür . ToString (öğe)); |
String gerçekText = String . Katılın (ayırıcı, gerçek . SEÇ (ITEA => Dönüştür . ToString (öğe)); |
İddia etmek . Areequal (Beklenen Text, gerçek metin); |
> |
özel boşluk yürütme (ISET < int >set, dize programı) |
Var komutları = |
program |
. Split (komut < int >. Ayırıcı) |
. Nerede (s => ! sicim . IsnullorEmpty (ler)) |
. Seç (komut < int >. Ayrıştırma); |
foreach (komutlarda var komutu) |
emretmek . Yürütme (set); |
> |
> |
> |
> |