2011-04-11 3 views
3

배열을 만들고 정상적으로 반복하는 법을 알고 있습니다. 그러나 다중 열 배열이 필요한 경우에는 어떻게해야합니까? 예 :두 개의 값 열을 사용하여 VB.NET 배열을 만드시겠습니까?

For Each row in NameofArray 
    Dim name as String = row 
    Response.Write("Hello " & name & "!") 
Next 

그러나 나는 같은 것을 수행하려는 경우 :이 배열을 할 수없는 경우

For Each row in NameofArray 
    Dim name as String = row.name 
    Dim age as Integer = row.age 
    Response.Write("Hello " & name & "! You are " & age & " years old!" 
Next 

을, 나는이 작업을 수행 할 수있는 또 다른 방법이 일반적으로 내가 좋아하는 뭔가를 할 수 있을까요?

+0

귀하의 두 번째 예제의 IEnumberable 익명 형식을 만들려면

당신은

///Spacer Top Dim NameOfArray = {New With {.Age = 21, .Name = "Bob"}, New With {.Age = 74, .Name = "Gramps"}} ///Spacer Bottom 

을 할 수 있습니다. 'NameofArray'는 정확히 어떤 타입의 객체입니까? 어떤 종류의 강력한 형식의 배열? –

+0

글쎄, 그게 내가 알아 내야 할 것입니다. 하나의 열로 배열을 설정하는 방법을 알고 있습니다. 그러나 두 개의 열을 가질 수 있습니까? 예 : Dim my_array를 배열 ("hello", "goodbye", "adios")로 쉽게 할 수는 있지만 두 열 (예 : 어레이 ("hello" "1", "goodbye" "4", "adios" "0")로 dim my_array를? – davemackey

답변

3

사용자 정의 데이터 형식 만들기 : foreach 문을 통해 그 배열을 통해 반복, 요소가 반환하는 경우,

DataType[] myData = new DataType[100]; 
myData[0].Name = "myName"; 
myData[0].Age = 100; 

참고 :

public struct DataType 
    public string Name; 
    public int Age; 
} 

이러한 유형이보다 같은 배열에서 사용할 수를 각 반복은 변경 될 수 없습니다. 이것이 요구 사항이라면 위의 DataType 선언에서 'struct'대신 'class'를 사용하는 것이 좋습니다. 이것은 다른 의미와 함께 올 것이다. 예를 들어, 클래스 DataType의 인스턴스는 명시 적으로 'new'키워드를 통해 생성되어야합니다.

+2

'new'키워드는 큰 문제가 아니며 클래스가 더 나은 선택 일 수 있습니다. – Martin

+1

VB 질문 나처럼 보입니다. – Jodrell

+0

읽기 전용이므로 읽기 전용으로 새 클래스를 만드십시오. – davemackey

2

귀하의 의견을 읽은 후에 나는 내 다른 대답이 아마 당신이 찾고있는 것이라고 생각합니다.

어떤 유형의 행이며 어떤 유형이 NameOfArray입니까?

행을 여러 멤버가있는 coumpound 유형으로 만들려면 몇 가지 옵션이 있습니다.

Structure Row 
    Public Name as String 
    Public Age as Integer 
End Structure 

입니다. 참조 유형을 선호하는 경우 StructureClass으로 대체하십시오.

또는 익명 형식을 사용하여,

Dim row = New With {Name = "Bob", Age = 21} 

그럼 당신은 당신이 ForEach를 사용하여 반복 할 수있는 행의 목록을 만들기 위해 제네릭을 사용할 수 있습니다.

Dim NameOfList As System.Collections.Generic.List(of Row) 

하거나

IEnumerable(of New With{Name As String, Age As Int}). //Not sure if this is VB 

을 지원되는 LINQ 쿼리 뭔가를해야만의 결과 인 경우에 나는 질문을 uderstand이 당신이 찾고 있던 물건의 종류 희망 확실하지 않다.

제 동료 답변에서 알 수 있듯이 익명 형식에 대한 지원은 C#에서 우월합니다. 그러나 VB.Net에서 질문을 했으므로 필자는 해당 컨텍스트로 제한 할 것입니다.

+0

적어도 VB를 쓰려고하면 +1! – MarkJ

1

Dictionary Class을 시도 했습니까? KeyValue 쌍 클래스를 사용하여 사전을 반복 할 수 있습니다.

// Create a new dictionary of strings, with string keys. 
// 
Dictionary<string, string> openWith = 
    new Dictionary<string, string>(); 

// Add some elements to the dictionary. There are no 
// duplicate keys, but some of the values are duplicates. 
openWith.Add("txt", "notepad.exe"); 
openWith.Add("bmp", "paint.exe"); 
openWith.Add("dib", "paint.exe"); 
openWith.Add("rtf", "wordpad.exe"); 


foreach(var item in openWith) 
{ 
Console.WriteLine(item.Key +" can be open with " + item.value); 
} 
+0

Dictionary 클래스를 시도하지 않았습니다 ... 구조보다 더 나은 옵션이라고 생각합니까? – davemackey

+0

Dictionary 클래스를 조금 더 살펴본 결과이 클래스에서 찾고있는 클래스가 아닌 것 같아요. 예를 들어 고유 키가 아닌 여러 쌍의 이름/연령을 원합니다. – davemackey

+0

값이 두 개인 경우 좋은 옵션이 될 것입니다. 다양한 검색 및 추가 방법을 지원합니다. – Anuraj

1

당신은 ... 즉, 두 개의 차원을 사용하여 배열 (수) 인덱스에 필요한

Dim array(,) As Object = { _ 
    {"John",26}, _ 
    {"Mark",4} _ 
} 

For row As Integer = 0 to array.GetUpperBound(0) 
    Dim name as String = CStr(array(row,0)) 
    Dim age as Integer = CInt(array(row,1)) 
    Response.Write("Hello " & name & "! You are " & age & " years old!") 
Next 
비록 일부의 클래스 또는 사용자 정의 형식에서 이러한 종류의 정보를 저장하는 더 나은 것

종류.

1

귀하의 의견을 읽은 후에 나는 그 질문을 이해한다고 생각합니다. 당신이 완벽하게 가능 보이는 이름 나이 튜플 ;-p

관련 문제