Nasıl değerine göre bir sözlük sıralarım?
Sık sık değerine göre, anahtarlar ve değerler oluşan bir sözlük sıralamak gerekiyor. Örneğin, I frekansı tarafından sipariş etmek istiyorum kelime ve karşılık gelen frekanslarda, bir karma sahiptir.
Bir Orada SortedListtek bir değer için iyi olan geri kelimenin eşlemek istediğiniz, (frekansını demek).
SortedDictionary anahtar, değere göre değil, emirleri. Bir Bazı çare özel bir sınıf , ama daha temiz bir yolu var mı?
Oluştur 02/08/2008 saat 01:40 2008-08-02 01:40
Bu aynı zamanda ilk 10 seçebilmesi ile büyük bir esneklik, 20% 10, vs. sağlayacak Yoksa için kelime sıklığı endeksi kullanıyorsanız type-ahead, ayrıca içerebilir StartsWithyanı maddesini.
.NET 2.0 veya üzeri hedefliyorsanız olduğundan, lambda sözdizimi içine bu kolaylaştırabilirsiniz - bu eşdeğer ama kısa. .NET 2.0 hedefliyorsanız Visual Studio 2008 (veya üstü) gelen derleyici kullanıyorsanız sadece bu sözdizimini kullanabilirsiniz.
Cevap 02/08/2008 saat 02:15 2008-08-02 02:15 share
Cevap 11/11/2010 saat 18:16 2010-11-11 18:16 share
Etrafa, ve biz bu yapabileceğiniz bazı C # 3.0 özellikleri kullanarak:
Bu benim gördüğüm en temiz yoludur ve karmaları taşıma Yakut şekilde benzer.
Cevap 02/08/2008 saat 01:43 2008-08-02 01:43 share
Sen değerine göre bir Sözlüğü sıralayabilir ve (bunun üstesinden foreach zaman değerleri sırayla çıkıp böylece) kendisine geri kaydedebilirsiniz:
Tabii, bu doğru olmayabilir, ama işe yarıyor.
Cevap 22/06/2011 saat 11:26 2011-06-22 11:26 share
kaynak kullanıcı Matt Frear
Yüksek düzeyde üzerinden bütün Sözlüğü ile yürümek ve her değer bakmak sonra başka bir seçenek yok.
Belki bu yardımcı olur: http://bytes.com/forum/thread563638.html kopyala / John Timney yapıştırılıyor:
Cevap 02/08/2008 saat 01:47 2008-08-02 01:47 share
Zaten bir sözlük sıralamak mümkün olmam. Aslında sipariş edilmez. Bir sözlükte için garanti anahtar ve değer koleksiyonları tekrarlanabilir olduğundan ve değerler indeksi veya anahtar tarafından alınabilmesi, ama burada herhangi bir düzenin garantisi değildir. Dolayısıyla bir liste halinde adı değer çiftini almak gerekir.
Cevap 19/12/2008 saat 23:47 2008-12-19 23:47 share
kaynak kullanıcı Roger Willcocks
Sen Sözlük girişleri sıralamak yoktur. NET'te Sözlük sınıf bir HashTable olarak uygulanır - bu veri yapısı tanımı gereği sıralanabilir değil.
Eğer (anahtarına göre) Topluluk içinde yineleme edebilmek için gerekirse - Bir İkili Arama Ağacı olarak uygulanan SortedDictionary, kullanmak gerekir.
farklı bir alana göre sıralanır çünkü durumda, ancak kaynak yapısı, önemsiz. Hala frekansa göre sıralayabilir ve ilgili alan (frekans) olanlar yeni bir koleksiyon koymak gerekir. Yani bu koleksiyonunda frekansları anahtarları ve sözcükler değerlerdir. pek çok kelime aynı frekansa sahip olabilir (ve bir anahtar olarak kullanmak için gidiyoruz) beri Sözlük ne de SortedDictionary (bunlar benzersiz anahtarları gerektirir) ne kullanamazsınız. Bu SortedList size bırakır.
Eğer ana / ilk sözlükte özgün öğenin bağlantısını sürdürmek ısrar neden anlamıyorum.
Koleksiyonunuzdaki nesneler daha karmaşık bir yapıya (daha fazla alan) vardı ve verimli bir şekilde erişim / tuşları olarak birçok farklı alanda kullanarak bunları sıralamak mümkün Gerekirse - Muhtemelen ana depolama oluşacak bir özel veri yapısını ihtiyacı olduğu bildirildi destekleyen O (1) monte edilmesi ve çıkarılması (LinkedList) ve çok sayıda indeksleme yapısı - Sözlükler / SortedDictionaries / SortedLists. Bu endeksler bir anahtar ve bir değer olarak LinkedList içinde LinkedListNode bir işaretçi / referans olarak karmaşık sınıfından alanlardan birini kullanabilirsiniz.
Ben düşünürdüm oldukça pahalı olur ana koleksiyon (LinkedList) ve kaldırma ile senkronize olan endeksler tutmak eklemeleri ve uzaklaştırmaları koordine etmek gerekir. onlar aramalar için fantastik ama birçok insetions ve silme gerçekleştirmek için gerektiğinde onlar bir yük haline - Bu veritabanı indeksleri nasıl çalıştığını benzer.
Bazı taramalı ağır işleme yapacağız eğer Yukarıdakilerin hepsi sadece haklı. Eğer sadece bir kez sıklığına göre sıralanır onları çıkışa gerekiyorsa o zaman sadece (anonim) tüp listeleriniz üretebilir:
Cevap 13/12/2012 saat 07:19 2012-12-13 07:19 share
kaynak kullanıcı Zar Shardan
Cevap 20/07/2015 saat 11:01 2015-07-20 11:01 share
kaynak kullanıcı mrfazolka
Bu Sözlük değerleri sıralamak nasıl göstermektedir. Biz Visual Studio ve vadede derlemek bir konsol programa bakınız. Bir Sözlük anahtarları ekler ve kendi değerlerine göre sıralar. Sözlük örnekleri başlangıçta herhangi bir şekilde sıralanır değil unutmayın. Bir sorgu açıklamada LINQ orderby anahtar kelime kullanın.
Sözlük [C #] sıralar OrderBy Clause Programı
Cevap 20/07/2012 saat 10:49 2012-07-20 10:49 share
kaynak kullanıcı lasitha edirisooriya
Veya eğlence için bazı LINQ uzantısı iyilik kullanabilirsiniz:
Cevap 30/06/2010 saat 12:12 2010-06-30 12:12 share
kaynak kullanıcı mythz
Bir sıralama SortedDictionarylistesi bir içine bağlamak için ListViewVB.NET kullanarak kontrol:
Cevap 23/04/2010 saat 10:36 2010-04-23 10:36 share
kaynak kullanıcı BSalita
İstediğiniz tüm Değer sıralama kriteri "geçici" listesi olması ise diğer cevaplar, iyidir. Eğer sıralama kriteri bir sözlük yapmak istiyorsanız Ancak, Keybu otomatik olarak senkronize göre sıralandı başka sözlükle Valuesen kullanabilirsiniz, Bijection<K1, K2>sınıf .
Bijection<K1, K2> Eğer bunlardan birini istiyorum sıralanmamış olması böylece, mevcut iki sözlükleri ile toplama başlatmak için izin verir ve diğeri, sizin gibi kodla bijection yaratabilecek sıralanmasını istediğiniz
Sen kullanabilirsiniz dictherhangi bir normal Sözlük (o uygulayan gibi IDictionary<>) ve ardından aramak dict.Inversegöre sıralanır "ters" sözlüğü almak için Value.
Bijection<K1, K2>bir parçası olan Loyc.Collections.dll , ancak isterseniz, basitçe kopyalayabilirsiniz kaynak kodu kendi projeye.
Not durumda, kullanamaz aynı değere sahip birden fazla anahtar vardır: Bijectionancak elle sıradan arasındaki senkronize olabilir Dictionary<Key,Value>ve BMultiMap<Value,Key>.
Cevap 26/02/2016 saat 07:15 2016-02-26 07:15 share
kaynak kullanıcı Qwertie
Sıralama yapıldığını Sözlük almanın en kolay yolu inşa kullanmaktır SortedDictionarysınıfın:
sortedSections irade ve sıralı sürümünü içeren sections
Cevap 02/04/2010 saat 23:36 2010-04-02 23:36 share
kaynak kullanıcı Alex Ruiz
Biz bir sözlük olduğunu varsayalım
1) kullanabilirsiniz temporary dictionary to store values as:
Cevap 02/02/2015 saat 10:46 2015-02-02 10:46 share
kaynak kullanıcı Akshay Kapoor
Eğer bir sözlük var Verilen Bir astar aşağıda kullanarak değerler üzerinde doğrudan sıralayabilirsiniz:
Cevap 31/05/2014 saat 23:30 2014-05-31 23:30 share
kaynak kullanıcı aggaton
Sen değeriyle Sözlük sıralamak ve aşağıdaki kodu kullanarak sözlükte sonucu alabilirsiniz:
Cevap 24/07/2012 saat 13:24 2012-07-24 13:24 share
kaynak kullanıcı pawan Kumar
Kod yapısı, bir yöntemler tek bir şey yapmak gerekir
ObjectDataSource: Bir Yöntem parametresi bir enum olduğunda sihirbazı kullanılamaz
Nasıl verimli bir çapraz katılmak Linq-to-SQL?
İki pencere formları ve i TAB basıldığında, kalıp 1 metin imleç form2 textbox.Form1 yerleştirilmelidir ve form 2 yan yana
tablo Hücredeki metni döndürme
beklendiği gibi olmayan açgözlü regex çalışmıyor
Nasıl tüm hataları yakalar bir form yazmak için?
VSIX proje şablonu içine eklemek yeni projectitem vstemplate
ADO .NET ve IQueryable