2012-03-25 5 views
1

안녕하세요, 다음 함수가 있습니다 :
입력 ArrayList 결과가 올바르게 정렬되었습니다.
리턴 값 returnList는 completly unordered입니다.
문제는 HashTable이 올바르게 주문되지 않았다고 생각합니다.
Hashtable을 주문할 수있는 방법이 있습니까, 아니면 어쨌든 returnList를 정렬해야합니까?
필드를 정렬하거나 정렬하고 싶습니다. HashList에서
HashList를 주문하는 방법?

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 
+0

아래의 구현을 사용하는 호출하기위한

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 

는 HashList 같은 것은 없습니다. Hashtable 또는 Dictionary는 근본적으로 순서가 없습니다. 그것이 그들이 빠른 이유입니다. –

+0

returnList에는 배열 배열이 있습니다. 이 경우에 "주문한"것은 무엇을 의미합니까? (배열에 대한 일반적인 비교가 없습니다) – Ando

답변

0

순서는 미정이다. 대신 TreeMap을 사용하십시오. MSDN에서 Sort a Map<Key, Value> by values (Java)

+0

질문은 Java가 아니라 VB.NET에 관한 것입니다. – Oded

+0

동일한 데이터 구조 원칙이 여전히 적용됩니다. – seand

2

참조 - HashTable :

는 키의 해시 코드에 따라 구성되는 키/값 쌍의 컬렉션을 나타냅니다. 당신은 당신이 기대하는 순서로 항목을하지 않는 이유

이 설명 - 그들은 키의 해시에 의해 주문받을.

주문을 보존해야하는 경우 SortedList 또는 OrderedDictionary을 사용하십시오.

0

정규 해시 테이블은 요소의 순서를 정의하지 않습니다. 아마도 나무 구조가 필요할 것입니다. 트리로부터의 검색은 O (log N) 대 해시의 O (1)입니다. 그것은 문제 일 수도 있고 아닐 수도 있습니다.

1

정렬하는 가장 좋은 방법은 정렬을 위해 응용 프로그램에서 사용할 수있는 정렬을위한 제네릭 클래스를 사용하는 것입니다.

Linq 및 Lamda 표현을 사용하는 아래 클래스를 사용하십시오. 이 클래스는

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

관련 문제