У меня есть список DirectoryInfo, содержащие имена папок, как это:Bubble Сортировать список с помощью LINQ?
80's
90's
2000
2001
Проблема заключается в том, что «IO.Directory.GetDirectories» функция возвращает общий Microsoft Сортировать так мой список отсортирован как это:
2000
2001
80's
90's
Я знаю, что алгоритм для пузырьковой сортировки (всегда, когда я вижу использование в ФОР и на ген я не вижу никакого метода сортировки Bubble, который я видел), и я надеюсь, что если сортировка Bubble может быть упрощена с использованием LINQ или других улучшенных методов, но не для ни для создания дополнительных объектов в памяти.
Как я могу Bubble СортировкаList (Of DirectoryInfo) по их Directory.Name собственности? (очевидно, я хочу сохранить объекты DirectoryInfo, а не возвращать пару отсортированных строк), а также, возможно, создать пузырь, не перераспределяя список с помощью LINQ-расширений?
UPDATE:
Если кто-то нужна информация это функция, которую я использую, чтобы получить список DirectoryInfo:
' Get Folders
Private Function Get_Folders(ByVal directory As String, ByVal recursive As Boolean) As List(Of IO.DirectoryInfo)
Dim searchOpt As IO.SearchOption = If(recursive, IO.SearchOption.AllDirectories, IO.SearchOption.TopDirectoryOnly)
Return IO.Directory.GetDirectories(directory, "*", searchOpt).Select(Function(p) New IO.DirectoryInfo(p)).ToList
End Function
UPDATE 2
Следуя рекомендациям по поводу комментариев, я пытаюсь упростить код всего в нескольких строках с использованием регулярных выражений и LINQ-расширений, обрабатывающих имена папок как целые числа для их сортировки, проблема в том, что он не работает, потому что у меня есть несколько папок, которые не могут быть преобразованы в числа, это примеры имен папок:
80's
90's
2000-2006
2007
2008
Classic
B.S.O
Maquetas
Мой вопрос Если я могу Exlude папки нецифровой при сортировке, а затем добавить, что исключенные папки для отсортированных имен папок «целых», я задаю этот вопрос просто не получить все папки два раза в сгенерируйте два разных списка, чтобы присоединиться к ним.
Также обратите внимание на имя папки «2000-2006», если я преобразую имя в целое число, я бы не получил ожидаемый результат при сортировке.
Так как же я мог бы Bubble сортировать содержимое папки списка, рассматривая их как то, что есть?, Строки, а не цифры.
Public Class Form1
Dim regex As New System.Text.RegularExpressions.Regex("\D")
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown
For Each folder In Get_Folders("E:\Música\Canciones", False) _
.OrderBy(Function(x) Convert.ToInt32(regex.Replace(x.Name, "")))
MsgBox(folder.Name)
' Exception here, because a folder named "B.S.O" and other named as "Classic",
' obviouslly they can't be converted to Integer :(
Next
End Sub
' Get Folders
Private Function Get_Folders(ByVal directory As String, ByVal recursive As Boolean) As List(Of IO.DirectoryInfo)
Dim searchOpt As IO.SearchOption = If(recursive, IO.SearchOption.AllDirectories, IO.SearchOption.TopDirectoryOnly)
Return IO.Directory.GetDirectories(directory, "*", searchOpt).Select(Function(p) New IO.DirectoryInfo(p)).ToList
End Function
End Class
http://stackoverflow.com/a/11052176/932418 –
@l.B Thankyou, это решение немного жестко закодировано. Я пытаюсь удалить все ненужные вещи, такие как расщепления и подстроки, но, возможно, мне может понадобиться помощь для ретуширования этого решения, потому что я не знаю, будет ли результат работать с моим списком , – ElektroStudios
Elektro Hacker, я протестировал это решение, и оно работает для вашего дела (я говорю о своем ответе не о согласии :)). –