如何订购HashList?

时间:2012-03-25 20:02:21

标签: vb.net hashtable

嗨,我有下一个功能:
输入ArrayList结果是正确排序的 返回值returnList是完全无序的 我认为问题是HashTable没有正确订购..
有没有办法可以订购Hashtable,还是应该在某种程度上对returnList进行排序? 我想订购或排序一个领域。

Private Function FilterDepartementenSurveys(ByVal results As ArrayList) As ArrayList
    Dim hashTable As New Hashtable(results.Count)

    For Each resultaat As DTO.Results.Reporting.FilledInSurvey In results
        If Not hashTable.ContainsKey(resultaat.DepartmentCode) Then
            hashTable.Add(resultaat.DepartmentCode, New ArrayList)
        End If
        Dim arraylist As ArrayList = CType(hashTable(resultaat.DepartmentCode), Collections.ArrayList)
        arraylist.Add(resultaat)
    Next

    Dim returnList As New ArrayList
    For Each list As ArrayList In hashTable.Values
        returnList.Add(list)
    Next

    Return returnList
End Function

4 个答案:

答案 0 :(得分:2)

来自MSDN - HashTable

  

表示根据键的哈希码组织的键/值对的集合。

这解释了为什么您没有按照预期的顺序获取项目 - 它们按密钥的哈希排序。

如果您需要保留排序,请使用SortedListOrderedDictionary

答案 1 :(得分:1)

排序的最佳方法是使用泛型类进行排序,可以在整个应用程序中进行排序。

使用以下使用Linq和Lamda表达式的类。

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Linq.Expressions

Public Class GenericSorter(Of T)

Public Function Sort(ByVal source As IEnumerable(Of T), _
                     ByVal sortBy As String, _
                     ByVal sortDirection As String) As IEnumerable(Of T)

    Dim param = Expression.Parameter(GetType(T), "item")

    Dim sortExpression = Expression.Lambda(Of Func(Of T, Object))_
    (Expression.Convert(Expression.[Property](param, sortBy), _
    GetType(Object)), param)

    Select Case sortDirection.ToLower
        Case "asc"
            Return source.AsQueryable().OrderBy(sortExpression)
        Case Else
            Return source.AsQueryable().OrderByDescending(sortExpression)
    End Select

End Function

End Class

要调用此类,请使用下面的实现

Dim gs As New GenericSorter(Of FileDepartmentSurveyData)
SurveyFormatItems = gs.Sort(SurveyFormatItems.AsQueryable, _
                             sortExpression, sortDirection).ToArray()

http://www.codeproject.com/Articles/37541/Generic-Sorting-with-LINQ-and-Lambda-Expressions

答案 2 :(得分:0)

HashList中的订单未确定。请改用TreeMap。见Sort a Map<Key, Value> by values (Java)

答案 3 :(得分:0)

常规哈希表不定义元素的顺序。您可能需要树结构。从树中检索是O(log N)与散列的O(1)。这可能是也可能不是问题。