Как отсортировать строку типа даты в списке строк? - PullRequest
0 голосов
/ 15 мая 2019

Как мне отсортировать строковую дату в списке строк?

Ввод:

2019/5/9, 2019/5/13, 2019/5 / 14,2019 / 5/ 17,2019 / 5 / 19,2019 / 5 / 15,2019 / 5/18

Ожидаемый результат:

2019/5/9, 2019/5/13, 2019/5/ 14,2019 / 5 / 15,2019 / 5 / 16,2019 / 5 / 17,2019 / 5/18

Мой код:

     Dim Mytargetlist As String = ""  
        Dim list As New List(Of String)      
        Mytargetlist = p(1) + "/" + p(2) + "/" + p(3)    
        list.Add(Mytargetlist)    
        'list.Sort()     
        Dim result As List(Of String) = list.Distinct().ToList
          If Session("mydata") Is Nothing Then
              Session("mydata") = New ArrayList
          End If
        TryCast(Session("mydata"), ArrayList).Add(result.ToArray())

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Чтобы ответить на заданный вопрос, вы можете вызвать перегрузку Sort, которая принимает делегата Comparison(Of T), и предоставить лямбду, которая сравнивает Strings как Dates:

list.Sort(Function(s1, s2)
              Dim d1 As Date
              Dim d2 As Date

              If Date.TryParse(s1, d1) AndAlso Date.TryParse(s2, d2) Then
                  'Both values convert so compare chronologically.
                  Return d1.CompareTo(d2)
              End If

              'At least one value does not convert so consider them equivalent.
              Return 0
          End Function)

Топреобразует каждое значение в фактическое Date для целей сравнения.Если вы хотите сделать что-то конкретное, когда успешно преобразуется только одно значение, например, недопустимые значения всегда идут последними, вы также можете реализовать это.

Тем не менее, если у вас нет очень веских причин для хранения дат в Stringsвы действительно должны использовать Date значения в первую очередь.

1 голос
/ 15 мая 2019

Если вы хотите отсортировать список дат, почему бы не использовать список (дат)?

     Dim list As new List(of Date)
     list.add(New Date(2019,5,9))
     list.add(New Date(2019,5,9))
     list.add(New Date(2019,5,01))
     list.add(New Date(2019,5,25))
     list.add(New Date(2019,5,13))
     list.add(New Date(2019,5,30))
     list.add(New Date(2019,5,9))

     list.Sort()
    Dim myFormat = "dd/MM/yyyy"
    For Each item As Date In list

    Console.WriteLine(item.ToString(myFormat)) 
    Next

Вывод: 01/05/2019 09/05/2019 09/05/2019 09/05/2019 13/05/2019 25/05/2019 30/05/2019

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...