2014-01-28 3 views
0

최근 Visual Basic .net에서 컴퓨터 프로젝트의 일부로 클라이언트 용 프로그램을 만들 때 다음과 같은 문제가 발생했습니다. 프로그램에 추가 마크를 받기 위해서는 Binary Search 나 Insertion Sort 서브 루틴을 재귀 적으로 선언해야하는데, 지금까지는 사용할 수있는 유일한 곳은 프로그램에 의해 생성 된 모든 보고서를 표시하는 View 폼입니다. 이것은 내 데이터를 저장하기 위해 MS Access를 사용하고 있기 때문에 모든 데이터가 다운로드되어 양식의로드 부분에 listview에 배치됩니다. 그래서 내가 그것을 사용할 수있는 유일한 방법은 내가 아주 vb에서 경험이 없다는 사실로 인해 나를 위해 주요 문제는 listview에서 실행하는 것입니다.바이너리 검색 또는 삽입 목록보기로 정렬 [Visual Basic .net]

이진 검색의 경우 사용자 열에 지정된 모든 항목을 배열로 다운로드하려고 시도했지만 배열에 하나의 열만있는 모든 항목을 다운로드 할 수 없어 가장 힘들었습니다. 또한 모든 단일 열을 검색하는 대신 사용자가 내 양식에서 열 항목이있는 것을 지정하는 대신 (예 : "19/02/2013"열 "날짜"에서), 제 생각에 지정된 열의 모든 단일 항목을 다운로드 할 수 있습니다. 배열은 나중에 이진 검색을 실행하여 알고리즘을 완료하도록 허용해야합니다. 여기에 내가 지금까지 가지고있는 것이있다.

Sub BinarySearch(ByVal Key As String, ByVal lowindex As String, ByVal highindex As String, ByVal temp() As String) 
    Dim midpoint As Integer 

    If lowindex > highindex Then 
     MsgBox("Search Failed") 
    Else 
     midpoint = (highindex + lowindex)/2 
     If temp(midpoint) = Key Then 
      MsgBox("found at location " & midpoint) 
     ElseIf Key < temp(midpoint) Then 
      Call BinarySearch(Key, lowindex, midpoint, temp) 
     ElseIf Key > temp(midpoint) Then 
      Call BinarySearch(Key, midpoint, highindex, temp) 
     End If 
    End If 
End Sub 

Private Sub btnSearch_Click(sender As System.Object, e As System.EventArgs) Handles btnSearch.Click 
    Dim Key As String = txtSearch.Text 
    Dim TargetColumn As String = Me.lstOutput.Columns(cmbColumns.Text).Index 
    Dim lowindex As Integer = 0 
    Dim highindex As Integer = lstOutput.Items.Count - 1 
    'Somehow all of the items in Target column must be placed in temp array 
    Dim temp(Me.lstOutput.Items.Count - 1) As String 

    ' BinarySearch(Key, lowindex, highindex, temp) 
End Sub 

은 삽입 정렬을 위해 난 어떻게 시작하는 단서가없는, 그리고 것은 내가 대신 나를 위해 그것을 할 것입니다 시스템 라이브러리를 호출하는 내 자신의 서브 루틴을 사용해야한다는 것입니다.

Private Sub InsertionSort() 
Dim First As Integer = 1 
Dim Last As Integer = Me.lstOutput. 
Dim CurrentPtr, CurrentValue, Ptr As Integer 
For CurrentPtr = First + 1 To Last 
CurrentValue = A(CurrentPtr) 
Ptr = CurrentPtr - 1 
While A(Ptr) > CurrentValue And Ptr > 0 
A(Ptr + 1) = A(Ptr) 
Ptr -= 1 
End While 
A(Ptr + 1) = CurrentValue 
Next 
Timer1.Enabled = False 
lblTime.Text = tick.ToString 
End Sub 

이 코드를 구현하는 방법에 어떤 아이디어가 매우 이해할 수있을 것이다, 나는 정말이 언어

+1

을 그래서, 당신은 정말 여기에 무엇을 요구하고있다 ? Access 테이블에서 열을 검색하고 배열에 값을 저장하는 데 어려움이 있습니까? 그것이 당신의 "고객"으로부터 "추가 마크"를 얻지 못하게합니까? –

+0

기본적으로 listview에서 데이터에 대해 이러한 알고리즘 중 하나를 구현하는 방법에 대한 일반적인 도움을 요청하거나 특정 열의 데이터를 모두 배열로 다운로드하는 방법을 묻습니다. – 5m0k3

+1

ListView가 작동하는 방식, 특히 그렇다면 어떻게 작동합니까? 바운드 ("다운로드"의 의미). db 데이터를 ArrayList와 같은 것으로 가져와이 방식으로 정렬하거나 ListView에 결과를 게시해야합니다. 특정 열을 정렬하기 위해 ListView에 정렬하려면 항목 비교 대 항목 비교 만 제공하는 사용자 지정 'ListViewSorter'가 필요하며 LV는 실제 정렬을 수행합니다. – Plutonix

답변

0
에 경험이 아니에요 내 마음에 보관하십시오 : 나는 사용해야 코드는 다음과 같습니다

아마도 이것은 당신에게 시작할 곳을 줄 수도 있습니다. 이미 거기에 "물건"을 ListView가있는 경우는 배열로 각 항목에 대한 Text 속성을 복사하려면 다음 코드를 사용하여 폼에 버튼을 추가 할 수 있습니다

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim myArray(Me.ListView1.Items.Count - 1) As String 
    Dim i As Integer 

    ' load array 
    For i = 0 To Me.ListView1.Items.Count - 1 
     myArray(i) = Me.ListView1.Items(i).Text 
    Next 

    ' show the results 
    Dim s As String = "" 
    For i = 0 To UBound(myArray) 
     s &= String.Format("myArray({0}): {1}", i, myArray(i)) & vbCrLf 
    Next 
    MsgBox(s, MsgBoxStyle.Information, "myArray Contents") 

    ' now go ahead and manipulate the array as needed 
    ' ... 
End Sub