날짜 배열이 다음과 같은 형식으로되어 있습니다 : 10/15/2005 또는 2/10/2011.임의의 날짜 배열을 시간순으로 어떻게 배치합니까?
배열에 10 개의 날짜가 있고 그 중 일부는 중복 될 수 있습니다.
arrDates (9) '요소 0-9은 1 일
들이 연대순으로되도록 요소를 재 배열 할 수있는 가장 좋은 방법은 무엇입니까 대표?
날짜 배열이 다음과 같은 형식으로되어 있습니다 : 10/15/2005 또는 2/10/2011.임의의 날짜 배열을 시간순으로 어떻게 배치합니까?
배열에 10 개의 날짜가 있고 그 중 일부는 중복 될 수 있습니다.
arrDates (9) '요소 0-9은 1 일
들이 연대순으로되도록 요소를 재 배열 할 수있는 가장 좋은 방법은 무엇입니까 대표?
짧은 목록 (배열)의 경우 보이지 않는 목록 상자 또는 조작 된 ADO 레코드 집합을 사용하거나 간단한 정렬 루틴을 직접 코딩 할 수 있습니다. 성능은 대용량 목록을 정렬 할 때까지는 큰 문제가 아닙니다.
다음은 임시 컬렉션을 사용하는 예입니다. 그것은 다차원 배열을 사용하여 clunky로 빠르게되는 다중 값 항목을 전달할 수 있다는 점에서 Recordset을 사용하는 것과 비슷한 이점이 있습니다. 콜렉션을 사용하기 위해서 당신은 가지고 있어야하는 값 (정렬 키 포함)을 포함하는 작은 클래스를 생성 할 것입니다.
이 특정 방식
는 간단한 순차 검색 (여기에 "J 루프") 대신에 이진 검색을 사용하여 최적화 할 수 있습니다 : 는 "날짜"와 같은 뭔가 물론Option Explicit
Private Sub Form_Load()
Dim A(9) As String, B(9) As String
Dim I As Integer, J As Integer
'Create some data, here we'll use String values but Date,
'Integer, Double, whatever work as well.
Randomize
For I = 0 To 9
A(I) = CStr(Fix(Rnd() * 100000))
A(I) = Right$(String$(5, "0") & A(I), 6)
Next
'Sort A() as B(). Could just as easily copy the results
'back into A() instead.
With New Collection
For I = 0 To UBound(A)
For J = 1 To .Count
If A(I) <= .Item(J) Then
.Add A(I), , J
Exit For
End If
Next
If J > .Count Then .Add A(I)
Next
For I = 1 To .Count
B(I - 1) = .Item(I)
Next
End With
'Print before and after.
AutoRedraw = True
Print "A", "B"
Print
For I = 0 To 9
Print A(I), B(I)
Next
End Sub
A와 표현 문자열 값은 다른 사람이 언급 한대로 정렬을 위해 정규화해야합니다. 여기에는 숫자를 기반으로 문자열 값을 만들고 정규화를 위해 앞에 오는 0으로 패딩하여 시뮬레이션합니다.
떠나기 전에 답을 수락하고 싶었지만 이제는 컴퓨터에 돌아와서 Array.Sort가 없다는 것을 알았습니다. Bob, 당신은 "invisible listbox"옵션을 언급합니다. 그게 뭐야? 그 방법이 어떻게 작동하는지 이해하고 싶습니다. 당신은 정교 할 수 있습니까? – phan
ListBox를 폼에 추가하고 Visible = False 및 Sorted = True 속성을 설정할 수 있습니다. 그런 다음 실행하면 항목을 추가하고 완료되면 List 속성에서 항목을 검색합니다. 이것은 VBA 호스트가 VB6에있는 것과 비슷한 것으로 작동하는 ListBox를 제공한다고 가정합니다. – Bob77
가장 쉬운 방법은 YYYYMMDD 형식으로 형식을 지정한 다음 어휘 적으로 정렬하는 것입니다 (사전 식, 문자순, 알파벳순). 어쩌면 우리는 여기에 숫자가 있기 때문에 잘못된 이름 일지 모르지만 아아.
BTW는 VB.NET, C# 또는 Java로 전환하는 것이 그리 좋지 않을까요? –
"어휘 적으로 정렬"이란 의미는 무엇입니까? 나는 그것을 봤고 나는 어휘력으로 뭔가를 정렬하는 방법 ("어휘, 단어 또는 언어의 형태소에 관한")을 얻지 못한다. BTW, Excel에서 VBA를 사용하고 있습니다. VB6에 태그를 추가하면 안됩니다. 실수였습니다. – phan
렉시 칼 (적어도 내가 의미했던 방식)은 '알파벳순, 문자 단위'로 의미합니다. 이 경우 숫자로 숫자를 표시합니다. 예 : '02'는 '10'앞에 오지만 '10'은 '2'앞에옵니다. 따라서 'DD'형식은 '2'를 '02'로 변경합니다. 탐색기에서 이러한 파일 이름으로 파일 이름에 날짜가있는 그림을 정렬하는 것이 좋습니다. –
먼저 모든 날짜가 같은 길이 (0 # 형식으로 한 자리 교체)를 가지고해야한다 당신이 그것을 사용하는 방법을 당신이 그 (것)들에게
Here 년대를 포맷 형식 $ 함수를 사용할 수 있습니다. 밥이 옳았다 :
그럼 당신은 그들에게 당신이 그것을
편집을 할 수있는 방법을
Here 's을 (를) 정렬 할 경우에 Array.sort를 사용할 수 있습니다. vb6에서 Array의 Sort 메서드를 사용할 수 없습니다. 직접 정렬 알고리즘을 직접 작성할 수있는 방법을 설명하는 기사 링크를 변경했습니다.
어, 어떻게 이것이 upvote를 얻을 수 있고, 대답은 훨씬 덜 받아 들여질 수 있습니까? 그것은 VB6에서 사용할 수없는 VB.Net 기술을 제안합니다. – Bob77
@BobRiemersma 맞았습니다. 링크가 업데이트되었습니다. – Beatles1692
저는 VB 프로그래머가 아니지만 VB 배열에 정렬 된 배열을 자동으로 반환하는'Sort()'메서드가있을 것이라고 생각합니다. 내장 된' DateTime' 형식입니다. C#에서 (.net 프레임 워크의 일부로 동일한 기능을 많이 사용합니다.) 'Array.Sort (myArrayName)'함수가 있습니다. –