2012-06-25 2 views
0

У меня есть список (списка (строки)) в vb.net, который является списком, который содержит списки, в которых есть 5 элементов списка строк.Как заказать Список (из списка)

Я хочу отсортировать списки по второму элементу в списках, но я не знаю, какой параметр необходим в методе .sort. Что мне нужно добавить в качестве параметра. Я читал что-то о написании функции сравнения и положить, что в скобках, но я не понимаю, как это работает.

dim multiList as list(of list(of string)) 

multiList.sort(compare second item in lists) 

Благодарности

ответ

3

Самый простой способ сортировки списка чего-либо на основе критериев, отличных от дефолта, - это написать функцию, которая при любой паре элементов вернет положительное целое число, если первое больше второго, отрицательное целое, если второй элемент больше первого, или ноль, если не выполняется ни одно условие (что означает, что элементы имеют равный ранг - необязательно, что они «равны»). Например, если вы абсолютно уверены, каждый внутренний список в списке списков будет иметь не пустую строку в качестве второго пункта:

 
    Shared Function CompareLists(L1 As List(Of String), L2 As List(Of String)) As Integer 
     Return L1(1).CompareTo(L2(1)) 
    End Function 

Затем, когда вы хотите, чтобы выполнить сортировку:

 
    Array.Sort(myArray, AddressOf CompareLists) 

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

+0

Благодарим вас за разъяснение. Я использую выражение лямбда, как я видел в другом ответе, но ваш ответ помог мне понять, что происходит, поэтому вы получите правильный ответ: – Aeropher

+0

@Aeropher: Я понимаю лямбда-выражения, но мне не нравится как они неявно glom локальные переменные в замыкания. Таким образом, небольшие изменения в коде могут иметь значительные реализации производительности. BTW, я должен был сделать функцию выше «Shared», чтобы избежать генерации дополнительного делегата каждый раз, когда вызывается функция «Сортировка». – supercat

0

Я не полностью понимаю, что вы пытаетесь сделать, но посмотрите на отсортированные списки?

Dim list As New SortedList(Of Integer, String) 

Он работает путем сортировки по ключу (целое число в данном случае), так как я сказал, я не уверен совсем то, что ваш запрашиваемая но, возможно, вы можете использовать это, чтобы решить вашу проблему.

+0

Я хочу, чтобы иметь возможность сортировать по любому значению в списке, а не по значению ключа. Я выбрал ответ выше, который может показать вам, что я имел в виду :) – Aeropher

2

Вы можете передать лямбда-выражение для метода сортировки:

multilist.Sort(Function(x, y) x(1).CompareTo(y(1))) 

Это будет сортировать список по второму элементу каждого содержащегося списка.

+0

Спасибо, это то, что я буду использовать, но у меня не было достаточно подробностей о том, как это работает. – Aeropher