2013-06-04 3 views
3

Как отсортировать элементы коллекции по значению в VB.NET?VB.net, Как сортировать элементы коллекции по значению

Я хочу разобраться в этом:

Dim col as Collection = New Collection 
col.Add("b","b1") 
col.Add("a","a1") 
col.Add("d","d1") 
+0

ли вы, Должны ли вы использовать коллекцию или дженерики? –

+0

только коллекция – exim

+4

Это позор. Словарь был бы намного более гибким. –

ответ

0

Как Collection.Add принимает общий тип объекта и нет определенного типа - сортировка не возможна. Поскольку объекты нужно сравнивать друг с другом, чтобы быть сортировкой, это будет похоже на сравнение апельсинов и яблок.

И коллекция предоставляет сортировку по ключу, а не по значению.

Думаю, вам, возможно, придется расширить класс Collection и реализовать сортировку. вы можете перемещать предметы с помощью методов Insert и RemoveAt.

И только мысль/совет: , если значения имеют определенный тип, как насчет использования какой-либо другой структуры данных. Как словарь, для которого вы можете отсортировать по значению, как указано в этом link

+0

Согласен. Или используйте общий тип (например, словарь), который откроет многие параметры –

2

Как @Krishnadditya упоминалось, Коллекции не являются идеальными для сортировки, поскольку они содержат элементы типа Object, который является слишком genereic, чтобы быть полезным в сравнении друг против друга. Если вы не были женаты на коллекции, вы можете сделать это с помощью запроса LINQ к списку или что-нибудь, что может быть литой перечислимого

Dim list = { 
     New With {.Object = "b", .Key = "b1"}, 
     New With {.Object = "a", .Key = "a1"}, 
     New With {.Object = "d", .Key = "d1"}} 

Dim sortedList = _ 
     From item In list 
     Order By item.Key 
0

Я решил использовать словарь:

Dim newcol = (From entry In col 
       Order By entry.Value Descending).ToDictionary(
       Function(pair) pair.Key, 
       Function(pair) pair.Value) 
Смежные вопросы