런타임에 내 Windows Forms 응용 프로그램에서 요소를 추가 할 때마다 배열의 크기가 조정됩니다. 먼저 size + 1
으로 크기를 조정 한 다음이 색인에 회원을 추가해야합니다. 어떻게해야합니까?VB.NET에서 런타임에 배열 크기 조정
답변
당신 ReDim
문을 사용할 수 있지만이 정말 '외설 최선의 선택. 배열의 크기가 자주 변경 될 경우 특히이 추가되는 것처럼 들리므로 일반 List(Of T)
또는 유사한 컬렉션 유형을 사용해야합니다.
당신은 당신이 마지막에 항목을 추가하는 것은 MyList.Add(item)
는, 일반적인 목록을 사용하여 파일의 상단에 Imports System.Collections.Generics
를 추가하려면 한 쉽게 것을 추가로, 배열을 사용하는 것처럼 사용할 수 있습니다. 이 같은
Dim MyList As New List(Of Integer)()
또는 문자열 목록 : 그럼, 당신은이 같은 새로운 정수리스트를 선언 할
Dim MyList As New List(Of String)()
당신은 생각을해야한다.
새 크기를 지정하려면 ReDim 명령을 사용하십시오.
ReDim MyArray(MyArray.Length + 1)
이 하나 나던 작업이 작품은, 그것은 나를 'ReDim을'문이 배열의 각 차원의 새로운 경계의 괄호 목록을 필요로 오류 제공합니다. –
감사합니다. 이렇게하면됩니다. Redim MyArray, (MyArray.Length + 1) –
이렇게하면'ReDim'이 매개 변수로 길이가 아닌 새로운 _upper bound_를 기대하기 때문에 배열 크기가 1이 아닌 2 씩 증가합니다 . –
내가 컬렉션 클래스의 몇 가지 유형을 선호하지만, 당신이 배열을 사용하려면 다음과 같이 그것을 할 것입니다 :
Dim arr() As Integer
Dim cnt As Integer = 0
Dim ix As Integer
For ix = 1 To 1000
cnt = cnt + 1
ReDim arr(cnt)
arr(cnt - 1) = ix
Next
이것은 N^2가됩니다. 당신은 [Shlemiel의 화가의 알고리즘] (http://www.joelonsoftware.com/articles/fog0000000319.html)을 말할 수 있습니까? –
ReDim 줄의 인수는 길이가 아니라 * 마지막 인덱스입니다.따라서 배열에서 배열의 길이는 cnt + 1이되고 배열의 끝에는 정의되지 않은 값이 남습니다 (실제로는 정의되지 않지만 * Nothing *과 같습니다). ([문서] (http://msdn.microsoft.com/en-us/library/w8k3cys2.aspx)에서는 명확하지 않지만 Visual Studio의 디버거를 사용하여보다 명확하게 시도 할 수 있습니다. "상한은 차원의 길이가 아니라 해당 차원의 가장 높은 인덱스 값입니다." –
요엘이 말했듯이 목록을 사용하십시오.
Dim MyList As New List(Of String)
String을로 변경하는 것을 잊지 마십시오. 사용중인 데이터 유형 중.
제안 된 ReDim의 경우이 시나리오에서 키워드 보존이 필요합니다.
ReDim Preserve MyArray(n)
이 질문은 현재 30,000 건이 넘기 때문에 "Preserve"키워드는 실제로 원래 배열을 유지하지 않고 완전히 새로운 배열을 할당하고 원래 하나 하나의 요소 ... 당신이 원하는 것이면 괜찮습니다. 그러나 일반적으로 프로그래머는 더 효율적인 것을 기대하고 있습니다. –
나만의 컬렉션 클래스를 만들 수도 있습니다. 새로운 프로그래머를위한 좋은 프로그래밍 연습.
Public Class MyList
Private Items() As String
Private No As Integer = 0
Public Sub Add(ByVal NewItem As String)
''Create a temporary new string array
Dim CopyString(No) As String
''Copy values from Global Variable Items() to new CopyString array
For i As Integer = 0 To No - 1
CopyString(i) = Items(i)
Next
''Add new value - NewItem - to CopyString
CopyString(No) = NewItem
''Increment No to No + 1
No += 1
''Copy CopyString to Items
Items = CopyString
'Discard CopyString
CopyString = Nothing
End Sub
Public Sub Show(ByVal index As Integer)
MsgBox(Items(index))
End Sub
End Class
''Now create a form with a TextBox name - txt, Button1 and Button2
Public Class Form1
''Declare txts as a new MyList Class
Private txts As New MyList
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
''Add text to txts which is a MyList Class
txts.Add(txt.Text)
txt.Text = ""
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
''Display value at a specific index
txts.Show(Convert.ToInt16(txt.Text))
txt.Text = ""
End Sub
End Class
일반적인 목록을 사용하는 것이 좋습니다. 그러나 배열의 크기를 변경하려면 Array.Resize(ByRef arr, newSize)
을 사용할 수 있습니다.
ReDim은 (꽤 나쁜) 아이디어 (VB 특정 유산, 매우 느림)가 아닙니다.
이것은 기존의 답변 중 두 가지를 주로 논평 한 것으로 보입니다. – Blackwood
글쎄, 아무도 언급 Array.Resize() 그래서, 나는 동의하지 않습니다. –
필자는'Array.Resize'가 고풍스러운'ReDim'보다 선호되어야한다고 동의합니다. 나쁜 소식은 두 사람이 아마도 똑같이 느리다는 것입니다. –
나
Dim Table1 As New DataTable
' Define columns
Table1.Columns.Add("Column1", GetType(System.String))
Table1.Columns.Add("Column2", GetType(System.Int32))
Table1.Columns.Add("Column3", GetType(System.Int32))
' Add a row of data
Table1.Rows.Add("Item1", 44, 99)
Table1.Rows.Add("Item2", 42, 3)
Table1.Rows.Add("Item3", 42, 3)
Table1.Rows.Add("Item4", 42, 3)
Dim arr(-1) As String
For Each dr As DataRow In Table1.Rows
ReDim Preserve arr(arr.Length)
arr(arr.Length - 1) = dr("Column1")
Next
- 1. vb.net에서 이미지 조작/크기 조정/크기 조정
- 2. VB.NET에서 이미지 크기 조정
- 3. 배열 크기 조정
- 4. ctypes 배열 크기 조정
- 5. VB.NET에서 런타임에 배열을 선언하는 방법
- 6. C++ 동적 배열 크기 조정 문제
- 7. 런타임에 VB.NET에서 컨트롤 추가하기 (
- 8. VB.net에서 런타임에 (런타임에) 어떻게 Listbox를 만드나요?
- 9. Java에서 이미지 크기 조정. 크기 조정 방법
- 10. 크기 조정 div 윈도우에서의 너비 크기 조정
- 11. 여러 비트 맵의 크기 조정/크기 조정
- 12. 런타임에 iPhone에서 UIView의 크기 조절
- 13. 크기 조정 양식은 다시
- 14. 동적 이미지 크기 조정
- 15. 탭 페이지 크기 조정
- 16. VB.NET에서 런타임에 동적 속성 생성
- 17. VB.NET에서 런타임에 클래스의 인스턴스 객체 변수를 만듭니다.
- 18. WPF의 런타임에서 TextBox 크기 조정
- 19. 패널 크기 조정
- 20. 이미지 크기 축소 크기 조정
- 21. 배열 크기
- 22. 터치 제스처로 UIView 이동, 크기 조정 및 크기 조정
- 23. RMagick : 축소판 이미지 크기 조정 및 크기 조정
- 24. NSWindow에 대한 크기 조정 코너/핸들 크기 조정 방법은 무엇입니까?
- 25. PHP 이미지 크기 조정 및 크기 조정 이미지 저장
- 26. jQuery 크기 조정 문제 정렬 가능 크기 조정 가능 draggable
- 27. 플렉스 구성 요소 크기 조정 및 크기 조정
- 28. 배열 만들기/크기 조정 ... 비 상수를 사용할 수 없습니까?
- 29. 크기 조정 내가 파이썬에서 일 오전 NumPy와 배열
- 30. 마지막으로 C#에서 마지막으로 정렬하지 않고 배열 크기 조정
안녕하세요! 당신 말이 맞습니다. 이것이 최고의 해결책입니다. 목록 신고 방법을 보여 주시겠습니까? –
오 예, 확실히 +1 목록에 대한입니다. 먼저 다른 오브젝트 옵션을 먼저 사용할 수 있는지 물어 보았습니다. 8^D –