包含名称和日期的VB.NET排序字符串,按字符串的日期排序
嗨,我的数据库中有数千个事务,它们都有一个映射到它们的事务键。 现在,我要做的是,在我的应用程序中,我有一个哈希表,我在其中存储映射到一个事务键的每个事务。 比如说,哈希表如下所示包含名称和日期的VB.NET排序字符串,按字符串的日期排序,vb.net,sorting,date,Vb.net,Sorting,Date,嗨,我的数据库中有数千个事务,它们都有一个映射到它们的事务键。 现在,我要做的是,在我的应用程序中,我有一个哈希表,我在其中存储映射到一个事务键的每个事务。 比如说,哈希表如下所示 MYHASH(key-->transactionkey,value--->transaction object) transaction key=transaction type+date 这里的问题是,我的事务密钥是这样制作的 MYHASH(key-->transactionkey,va
MYHASH(key-->transactionkey,value--->transaction object)
transaction key=transaction type+date
这里的问题是,我的事务密钥是这样制作的
MYHASH(key-->transactionkey,value--->transaction object)
transaction key=transaction type+date
其中交易类型可以是“实际”或“手动”
完成所有这些之后,我将所有这些事务键存储在一个数组中,然后调用Arrays.sort方法
问题是Arrays.sort按字母顺序对其排序,所以实际值先出现,然后是手动值,我需要的是它应该按日期而不是事务类型对键进行排序
我不能更改事务密钥的生成方式,因为这将需要在我使用过事务密钥的程序中的任何地方进行更改
有人能提出一些在分类时可以做的事情吗
Dim arr = New String() {"Actual2014/6/21", "Manual2014/5/12"}
arr = (From a In arr _
Let datepos = a.LastIndexOf("/"c, a.LastIndexOf("/"c) - 1) - 4 _
Order By _
DateTime.Parse(Right(a, datepos)), _
Left(a, datepos - 1) _
Select a).ToArray()
要避免分配新数组,请单独定义排序函数并使用它:
Private Function CompareStupidKeys(ByVal x As String, ByVal y As String) As Integer
Dim datepos_x = x.LastIndexOf("/"c, x.LastIndexOf("/"c) - 1) - 4
Dim datepos_y = y.LastIndexOf("/"c, y.LastIndexOf("/"c) - 1) - 4
Dim date_comparison = DateTime.Compare(DateTime.Parse(Right(x, datepos_x)), DateTime.Parse(Right(y, datepos_y)))
If date_comparison = 0 Then
Return String.Compare(Left(x, datepos_x - 1), Left(y, datepos_y - 1))
Else
Return date_comparison
End If
End Function
....
Array.Sort(arr, AddressOf CompareStupidKeys)
你能解释一下你的代码是做什么的吗?我对vb.net比较陌生,所以不知道arr在这里是什么意思。
arr
表示你的事务密钥数组,你说你有(并试图输入到array.Sort
)arr
是带有的。如果你有足够新的VB.NET,你可以省略延续符号。非常感谢你的回答,你的代码对我来说非常好,只是做了一些小的改动。这很好,但是如果你在同一个列表/数组中排序记录,其中有些有日期,有些有日期和时间,有些没有(只是字符串)呢?没有时间的Coolmacdude约会实际上是以一天中的午夜为时间。然后您决定如何将没有日期的与有日期的进行比较,并在CompareStupidKeys
或linq查询中反映这些更改,例如orderbyhasdate(…)、DateTime.Parse(…)
。