2013-02-16 1 views
0

아래의 코드에서 봐 주시기 바랍니다 : 목록 ORDER

Public Class PersonTest 

    Public Function ListTest() 
     Dim list As List(Of Person) = New List(Of Person) 
     Dim p1 As Person = New Person(1, "Ian") 
     Dim p2 As Person = New Person(2, "Steven") 
     Dim p3 As Person = New Person(3, "Sharon") 
     list.Add(p1) 
     list.Add(p2) 
     list.Add(p3) 
     For Each p As Person In list 
      MsgBox(p.IDNumber) 
     Next 

    End Function 

End Class 

Public Class Person 
    Public IDNumber As Integer 
    Public Name As String 

    Public Sub New(ByVal id As Integer, ByVal name As String) 
     IDNumber = id 
     name = name 
    End Sub 

End Class 

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim pt As PersonTest = New PersonTest 
     pt.ListTest() 
    End Sub 
End Class 

내가 메시지 상자 인쇄 기대 : 그것은 않습니다 1,2,3. List가 게재 신청서를 사용하고 있는지 확인할 수 있습니까? 나는 목록 즉에서 데이터베이스 쿼리의 결과를 저장하기 위해 계획입니다 : ID

BY

SELECT * 사람 FROM ORDER SQL 문은 ID에 의해 정렬됩니다. 목록이 ID별로도 주문된다고 가정 할 수 있습니까?

내가 묻는 이유는 여기에 내 질문에 대한 답변자가 있기 때문에 : Data Access Layer returns DataTable은 목록을 사용하여 데이터 액세스 레이어에서 개체를 반환 할 것을 제안합니다.

+0

목록은 목록에 추가 한 순서대로 "IDNumber"에 정렬되지 않습니다. – Styxxy

+0

코드 아래에있는 SQL 문은 ID 번호순으로 정렬 된 목록에 입력됩니다. – w0051977

답변

3

예, 목록은 입력 한대로 개체를 저장합니다. List(Of T).Add 참조 :

목록 (Of T)의 끝에 개체를 추가합니다.

+0

감사합니다. 참조 용 +1. – w0051977

2

an IList은 이런 식으로 동작 할 것이라고 가정 할 수 있습니다. 위에서 열거 한 것 이상으로 인덱스를 제공하기 때문에리스트를 지원하기 위해 목록의 종류를 일정하게 유지해야합니다. 당신이 명시하려면

그러나, 당신은 항상 명시 적으로 정렬 할 수 있습니다

For Each p As Person In list.OrderBy(Function(pe) pe.IDNumber) 
+0

+1을 명시 적으로 무시합니다. – w0051977

2

또 다른 옵션은 내부적으로 지정된 키와 기본 비교를 기반으로 순서를 유지하는 SortedList을 사용하는 것입니다 (자신의 비교자를 제공하지 않는 한).

Dim list As New SortedList(Of Integer, Person) 

    Dim p1 As Person = New Person(1, "Ian") 
    Dim p2 As Person = New Person(2, "Steven") 
    Dim p3 As Person = New Person(3, "Sharon") 
    list.Add(p3.IDNumber, p3) 
    list.Add(p1.IDNumber, p1) 
    list.Add(p2.IDNumber, p2) 

    For Each p As Person In list.Values 
     MsgBox(p.IDNumber) 
    Next 

나는 의도적으로 항목이 목록에 추가되는 순서를 뒤섞었습니다. 목록이 변경 될 때마다 항목이 올바른 순서로 유지되도록 정렬 알고리즘을 실행합니다. 사용 방법에 따라 약간의 오버 헤드가 발생할 수 있습니다.

+0

+1을 제안합니다. – w0051977

관련 문제