【问题标题】:How do I sort an array of different times?如何对不同时间的数组进行排序?
【发布时间】:2017-09-09 10:58:03
【问题描述】:

所以我有一个不同时间段的数组,但是我想从最早的时间到最晚的时间排序,但是,我还想删除数组中时间值为 12:00am 的任何元素.

Appointment(0) = #10:45:00 AM#
Appointment(1) = #12:00:00 AM# 'My actual has up 80 elements of different timeslots but I'm using 3 elements as an example
Appointment(2) = #12:00:00 AM#

有没有人可以帮我解决这个问题?

【问题讨论】:

  • 这是做作业的吗? (即您必须使用数组,还是其他数据结构可以?)
  • 这是我大学的编程作业,是的,我已经根据数组在代码中构建了主要算法,因此我不能使用任何其他数据结构
  • 是否允许使用内置排序?
  • 是的,但我不知道如何使用这种方法

标签: arrays vb.net algorithm sorting


【解决方案1】:

如果您只使用 DateTime 列表和 Sort 方法,则使用字符串数组不是一个好主意。

Dim list As List(of DateTime) = new List(of DateTime)
For Each val As String In Appointment
    list.Add(val.replace(" ",""))
Next
list.Sort(New Comparison(Of Date)(Function(x As Date, y As Date) y.CompareTo(x)))

【讨论】:

  • 所有这些解析的东西都是不必要的; #10:45:00 AM# 已经是 Date 文字。所以这只是一种排序,它不会按要求删除 12:00 AM。
  • @Ryan 编辑只是删除​​空格原因,因为我记得格式应该是:#07:00:00AM#
【解决方案2】:

.Net 中没有任何东西可以从数组中删除特定项目,但可以使用 LINQ 稍微“简化”一下:

Dim Appointment = {#10:45#, #12AM#, #12AM#}

Appointment = (From a In Appointment Where a <> #12AM# Order By a).ToArray

Appointment = Appointment.Except({#12AM#}).ToArray
Array.Sort(Appointment)

更有效的替代方法是使用ListSortedSet 等通用集合:

Dim list = New List(Of Date) From {#10:45#, #12AM#} ' or Dim list = Appointment.ToList
list.Add(#12AM#)

list.RemoveAll(Function(a) a = #12AM#)
list.Sort()

【讨论】:

  • 为什么你认为使用像 List 这样的专用泛型集合比 LINQ 是“更好的选择”?
  • @JimMischel 我想这有点主观,所以我把它改成了高效的。更好的是更少的 LINQ 开销,可能更少的内存分配,并且对于刚接触编程的人来说可能更容易
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2023-02-24
  • 2010-11-28
  • 2010-11-28
相关资源
最近更新 更多