2011-07-17 28 views
8

Chcę utworzyć dwuwymiarową tablicę, nie znając rozmiaru pierwszego wymiaru.Jak utworzyć dwuwymiarową macierz długości dynamicznej?

Na przykład mam nieznaną liczbę wierszy, kiedy tworzę tablicę. Każdy wiersz reprezentuje konto. Exit 4 kolumny dla każdego wiersza: id, nazwa, użytkownik, hasło

Próbowałem z postrzępionych tablicy, ale to nie jest możliwe, aby:

int[][] jaggedArray = new int[][3]; 

także Szukałem ArrayList, wdrożenie z clases oraz niewiele o Generics.

szukam rozwiązania, które mogą umożliwić łatwą manipulację danymi jak:

  • Dodaj do listy, wybieranie elementów wejściowych
  • z wykorzystaniem elementów w bazie zapytań
  • używając jako parametrów w innych funkcje

Bo jestem newbie w .NET (C#), proszę podać mi kod rozwiązań, zamiast generic (szukaj) rozwiązania

Odpowiedz

2

Nie ma czegoś takiego jak dynamiczne tablice długości w .NET. Zamiast tego użyj numeru List<>.

Granice macierzy muszą być znane podczas tworzenia tablicy. To, co mogło cię zdezorientować, to to, że wygląda inaczej w przypadku poszarpanych tablic, ale tak nie jest: ponieważ jest to tablica tablic, kiedy ją utworzymy, będzie to tablica nieumiejętnych tablic (na przykład: null). Następnie musisz ponownie przydzielić każdą z tych tablic, aby z nich korzystać.

17

IMO, ponieważ "słupy" są stałe, zadeklarować klasę na to:

public class Account 
{ 
    public int ID {get;set;} 
    public string Name {get;set;} 
    public string User {get;set;} 
    public string Password {get;set;} // you meant salted hash, right? ;p 
} 

teraz mają:

List<Account> list = new List<Account>(); 

ten ma wszystko, czego potrzeba:

dodaj do listy, wybierz, wprowadź elementy

list.Add itp

wykorzystujące elementy w bazie zapytań używając jako parametrów w innych funkcjach

niejasne bez więcej informacji, ale można przejść albo wartości Account lub invidual lub całą listę.

+0

dziękuję. Mam inne pytanie: Jak odzyskać wartości członków klasy dla określonego elementu listy? – user848568

+2

@user masz na myśli 'list [0] .Nazwa'? –

+0

Moja sprawa ma jedną niewielką różnicę. Zarówno wiersze, jak i kolumny nie są znane. Jak mogę osiągnąć ten sam wynik dla '2-D Array '? – barnes

0

Dopóki wiem, nie możemy utworzyć tablicy bez znajomości jej rozmiaru. Dlaczego nie wypróbowujesz Tablicy Listy? W ten sposób:

List<int>[] a = new List<int>[yourDesireColumnNumber]; 

Z listą, dodaj, wybierz, elementy wejściowe jest trywialne. Jeśli chcesz nadać go jako parametr w innych funkcjach, po prostu określ Typ.

+0

Nie masz na myśli listy naprawionych tablic int, a nie ustalonej tablicy listy int? –

+3

@Scrum ma rację - jeśli wybierzesz to podejście (a ja bym tego nie zrobił; p) byłby to 'List ', a nie 'List []' –

+0

Twój powinien to wypróbować, zanim to osądzisz. Jest to tablica listy . Tak przy okazji, podejście Marc jest świetne. ;) Uczę się z tego. –

Powiązane problemy