我的数据库中有数以千计的事务,这些事务都有映射到它们的事务键。 现在,我所做的是在我的应用程序中我有一个哈希表,其中我将每个事务映射到一个事务键。 所以哈希表可以说比如这个
MYHASH(key-->transactionkey,value--->transaction object)
这里的问题是我的交易密钥是这样的
transaction key=transaction type+date
其中交易类型可以是“实际”或“手动” 完成所有这些后,我将所有这些事务密钥存储在一个数组中,然后我调用Arrays.sort方法。
问题是Arrays.sort按字母顺序对它进行排序,所以Actual先来然后是manual,我需要的是它应该按日期而不是事务类型对键进行排序。
我无法更改交易密钥的生成方式,因为在我的程序中,我需要使用事务密钥进行更改。
有人可以建议在排序时可以做的事情。
答案 0 :(得分:0)
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)