2013-06-02 3 views
0

У меня есть словарь, который содержит другой словарь в качестве значения что-то вроде этогоКак отсортировать словарь, содержащий словарь?

Dictionary<string, Dictionary<double,double>> 

теперь я хочу, чтобы отсортировать его по значению внутреннего словаря , как я могу это сделать ??

+2

Я даже не собираюсь представить себе, почему Вы нуждались бы такую ​​структуру данных, но то, что некоторые примеры данных, которые вы будете держать, и как вы пытаетесь сортировать данные? Помните, что сам словарь не сортируется. – gunr2171

+0

Некоторые значения словарей и на каком основании вы хотите их отсортировать. –

+0

извините, я не эксперт по C#, вы бы предложили способ сохранить 3 значения как один элемент? – user1225072

ответ

4

От взглядов вашего комментария

жаль, что я не являюсь экспертом по C#, вы могли бы предложить способ хранения 3 значения как один элемент?

Я хотел бы предложить создать класс и вид на него, как этот

public class MyClass 
{ 
    public string StringProperty {get;set;} 
    public int FirstDoubleProperty {get;set;} 
    public int SecondDoubleProperty {get;set;} 
} 

Затем создать коллекцию, как этот

List<MyClass> MyClasscol = new List<MyClass>(); 

MyClass mc = new MyClass(); 

mc.StringProperty = "User1225072"; 
mc.FirstDoubleProperty = 5; 
mc.SecondDoubleProperty = 6; 

MyClasscol.Add(mc); 

mc = new MyClass(); 

// and So on 

потом вроде как этот

var newsortedcollection = MyClasscol.OrderBy(x => x.FirstDoubleProperty); 
+0

большое спасибо, это отлично работает – user1225072

1

Если предположить, что вы теперь пытаетесь выяснить, как хранить и упорядочивать er набор объектов с несколькими свойствами, то у вас есть несколько вариантов. Nikhil Agrawal's answer - отличное решение, но есть моменты, когда вам может не понадобиться/не нужно создавать для этого пользовательский класс. Для этих ситуаций (предпочтительно, когда ваш код является частным, а не частью какого-либо API), альтернативы ниже могут быть вариантом.

KeyValuePairs

В зависимости от ваших требований и исходного сообщения с использованием словарей, похоже, вместо словаря словарей (многоуровневый), вы, вероятно, хотели словарь keyvaluepairs (плоского).

// using keyvaluepair 
var keyValueDict = new Dictionary<string, KeyValuePair<double, double>>(); 
keyValueDict.Add("string", new KeyValuePair<double, double>(5.8, 7.4)); 
var sortedKeyValues = keyValueDict.OrderBy(x => x.Value.Key); 

Кортеж

Альтернативой не столь приятным KeyValuePair является Кортеж введен в .NET 4. Кортеж представляет собой общий класс, который позволяет хранить введенные значения свойств, не создавая свой собственный класс. Стоит отметить, что существуют кортежи для до 8 свойств.

// using tuple 
var tupleList = new List<Tuple<string, double, double>>(); 
tupleList.Add(new Tuple<string, double, double>("string", 5.8, 7.4)); 
var sortedTuples = tupleList.OrderBy(x => x.Item2); 

Есть некоторые хорошие SO вопросы о кортежей, если вы заинтересованы:
Is Using .NET 4.0 Tuples in my C# Code a Poor Design Decision?
Are EventArg classes needed now that we have generics

+0

отличная информация, спасибо – user1225072

Смежные вопросы