NIetypowe zwiększanie tablicy dwuwymiarowej.

0

Witam!
Powiedzcie mi jakie są sposoby na stworzenie tablicy dwuwymiarowej stringów ,o 3 kolumnach i nieskonczenie wielu wierszach?

Da się to robic bez tworzenia kopii tablicy?

Mam np


int rows=1;
int colls = 3;
string[,] Baza = new string[rows,colls];

 

I chce pobierać do tej tablicy 3 pola (imie, nazwisko, wiek)

user image

Po prostu chce dodawać kolejne wiersze i wypelniać te 3 kolumny bazy.

Macie jakieś pomysły?

Do tej pory napisałem coś takiego:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Rekordy_danych
{
    class Program
    {
        static void Menu()
        {
            Console.WriteLine("========================================================");
            Console.WriteLine("================== BAZA DANYCH =========================");
            Console.WriteLine("========================================================");
            Console.WriteLine(" 1 - aby dodac nowy rekord ");
            Console.WriteLine(" 2 - aby usunac jakis rekord ");
            Console.WriteLine(" 3 - aby wyswietlic wszystkie rekordy ");
            Console.WriteLine(" 4 - aby posortować rosnaco i wyswietlic ");
            Console.WriteLine(" 5 - aby posortowac malejaco i wyswietlic ");
            Console.WriteLine(" 6 - aby zapisac do pliku ");
            Console.WriteLine(" 7 - aby wydrukowac ");
            Console.WriteLine(" 0 - aby wyjsc ");
            Console.WriteLine("========================================================");
            Console.WriteLine();
            Console.WriteLine();

        }

        static void ZwiekszRozmiar(ref string[,] TAB1, uint zwiekszo)
        {
            int wiersze = TAB1.GetLength(0);
            int kolumny = 3;
            string[,] TAB2 = new string[wiersze+zwiekszo,kolumny];
            
            for (int i = 1; i <= TAB1.GetLength(0)-1; i++)
			{
                for (int j = 1; j <= TAB1.GetLength(1)-1; j++)
			    {
			        TAB2[i,j] = TAB1[i,j];
			    }
			 
			}
            
        }

        static void DodajRekord(ref string[,] TAB1)
        {


            for (int i = 0; i < TAB1.GetLength(0); i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Console.WriteLine("Podaj imie nr "+(i+1)+ " :");
                    TAB1[i, 0] = Console.ReadLine();
                    Console.WriteLine("Podaj nazwisko nr " + (i + 1) + " :");
                    TAB1[i, 1] = Console.ReadLine();
                    Console.WriteLine("Podaj wiek nr " + (i + 1) + " :");
                    TAB1[i, 2] = Console.ReadLine();
                    
                }
            }
            
            
            ZwiekszRozmiar(ref TAB1, 1);
        }


        static void WyswietlRekordy(string[,] TAB1)
        {
            Console.WriteLine("   IMIE  "+"   NAZWISKO   "+"   WIEK   ");
            for (int i = 0; i < TAB1.GetLength(0); i++)
            {
                for (int j = 0; j < TAB1.GetLength(1); j++)
                {
                    Console.Write(TAB1[i,j]);
                }
                Console.WriteLine();
            }

        }
           

       

        static void Main(string[] args)
        {
            int rows = 1, cols = 3;
            string[,] BazaDanych = new string[rows, cols];
            int wybor = 0;
            

            do{
                Menu();
                wybor = int.Parse(Console.ReadLine());

                switch (wybor)
                {
                    case 1: /////////////// dodawanie nowego rekordu
                        {
                            Console.WriteLine("==========Dodawanie nowego rekordu===============");
                            Console.WriteLine();

                            //ZwiekszRozmiar(ref BazaDanych, 1);
                            DodajRekord(ref BazaDanych);
                            

                            break;
                        }

                    case 2: ////////////// usuwanie rekordu
                        {

                            break;
                        }

                    case 3: ///////////// wyswietlanie wszystkich rekordow
                        {

                            break;
                        }

                    case 4: ////////////// sortowanie malejaco
                        {

                            break;
                        }

                    case 5: ////////////////// sortowanie rosnaco
                        {

                            break;
                        }

                    case 6: ///////////////// zapis do pliku
                        {

                            break;
                        }

                    case 7: /////////////// drukowanie
                        {

                            break;
                        }

                    case 0: /////////////////// wyjscie z aplikacji
                        {
                            Console.WriteLine("Do widzenia!");
                            Environment.Exit(1);
                            break;
                        }

                    default: /////////////// domylsnie
                        {
                            Console.WriteLine("Bledna opcja! Wybierz ponownie!");
                            break;
                        }
                }
            }
            while(wybor != null);
        }
    }
}

0

O ile dobrze rozumiem to bede musial utworzyc w sumie 3 kolekcje?
Dla każdej kolumny osobno, żeby spokojnie zwiekszac rozmiar?:)

0

Stwórz klasę Osoba o trzech polach: imie, nazwisko, wiek. A potem stwórz kolekcję obiektów typu Osoba.

0

Wpierw chce to zrobić w konsoli, bez klas i obiektów ale jakiś pomysł jest :)

0

Korzystanie z klas i obiektów jest możliwe również w konsoli.;)

0

No wiem ale wpierw chce zrozumieć jak to od gruntu wygląda ;)

Na razie zrobiłem sobie coś takiego:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace Rekordy_danych2
{
    class Program
    {
        static void Main(string[] args)
        {
            string imie, nazwisko, wiek;
            int licznik = 0;

            var Baza_Danych = new List<string> { "IMIE", "NAZWISKO", "WIEK" };
            int rozmiar = Baza_Danych.Count();
           
          
           

            do{
                Console.WriteLine("Wpisz imie: ");
                imie = Console.ReadLine();
                Baza_Danych.Add(imie);
                Console.WriteLine("Wpisz nazwisko: ");
                nazwisko = Console.ReadLine();
                Baza_Danych.Add(nazwisko);
                Console.WriteLine("Podaj wiek: ");
                wiek = Console.ReadLine();
                Baza_Danych.Add(wiek);
                licznik++;
            }
            while(licznik < rozmiar);

                             
                        foreach (var pole in Baza_Danych) // wyswietlanie kolekcji
                        {
                            Console.Write(" " + pole + " ");
                        }
                        Console.WriteLine();
                       
                  


            Console.ReadLine();
        }
    }
}


Tylko chciałbym ,żeby mi to 1 pod drugim wyswietlalo. Gdzie tu wstawic writeline() ?

0
Odyn napisał(a):

Tylko chciałbym ,żeby mi to 1 pod drugim wyswietlalo. Gdzie tu wstawic writeline() ?

Na tyle, na ile rozumiem Twoje intencje, to chcesz chyba wyświetlać trzy elementy z kolekcji Baza_Danych w jednej linii, tak?

0

Tak :) Jak najbardziej :)

Rekord po rekordem

Czyli mam np głowny rekord

IMIE NAZWISKO WIEK

ANNA KOWALSKA 23
BEJBE CZUGEWA 27
SAM SRUDENAJT 34

ITD ;d

0

W takim razie daj Console.WriteLine co trzy elementy kolekcji, tylko użyj for, a nie foreach.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.