Wartość elementów tablicy jednowymiarowej zapisywane do tablicy wielowymiarowej

0

Witam serdecznie,

Ostatnio naszła mnie wielka potrzeba zapisywania elementów tablicy wypełnianych o wartości dajmy na to losowe w pętli do tablicy wielowymiarowej, która ma tyle wymiarów ile elementów iteracyjnych tablicy jednowymiarowej. Poniżej przedstawię przykład

Dajmy na to mam dynamicznie przypisać do tablicy jednowymiarowej int[] tab_jednowymiarowa o ilości elementów tejże tablicy "3", czyli:

            //PĘTLA 1
  
            tab_jednowymiarowa = new int[3];
            for (int i = 0; i < 3; i++)
            {
                tab_jednowymiarowa[i] = i+2;
            }
 

Teraz otrzymujemy zmienne w tablicy jednowymiarowej, a dokładniej, dla:

   tab_jednowymiarowa[0] = 2; //bo i=0+2
   tab_jednowymiarowa[1] = 3; //bo i=1+2
   tab_jednowymiarowa[2] = 4; // bo i=2+2

teraz z tych trzech wyników chciałbym otrzymać tablicę (po przejściu całej poprzedniej pętli) w tym wypadku wielowymiarową (3 zmienne int) coś takiego:

tab_wielowymiarowa[tab_jednowymiarowa[0], tab_jednowymiarowa[1]... tab_jednowymiarowa[n]]

Czyli w teorii chciałbym otrzymać tablicę o wartosci:

   tab_wielowymiarowa = ma wartość :2,3,4

Powyższy kod napisałem tak ponieważ nie do końca wiem i rozumiem odwoływanie się do elementów tab wielowymiarowej oraz w jaki sposób się je zapisuje, ogólnie to mało wiem o tab wielowymiarowych, może ktoś poleci jakiś tutek na ten temat, który w prosty sposób tłumaczy co i jak? Dodam jeszcze ze PĘTLA 1 ma chodzić w innej petli, która to będzie odpowiedzialna za przypisywanie "sekwencyjne" trzech wartości tab jednowymiarowej, po czym nadpisuje znów te zmienne (i w tym momencie chciałbym przed "nadpisaniem" przechwycić to do tej wielowymiarowej) żeby stworzyć swego rodzaju "historę" or something :D

Pozdrawiam
Oskar

0

Hmmm.... nikt nie ma żadnego pomysłu??

0

Tablica dwuwymiarowa to jest tablica tablic. Żeby zobrazować narysuj sobie na kartce tablicę i potem w każdym elemencie narysuj tablicę (rozpisując w dół) zobaczysz co otrzymasz.
Kolejna rzecz do zastanowienia: narysuj tablicę 16 elementów, podziel kreską na 4 części po 4 elementy każdy. Przerysuj tablicę z tym, że każdą część w nowej linii. Otrzymasz tablicę dwuwymiarową o rozmiarach 4x4, a ta 16 elementowa tablica jest to zobrazowanie jak zapisywane to jest w pamięci. Jeżeli chodzi o deklarację to po prostu mamy np. int tablica[4,4]

Jak nie wpadniesz na rozwiązanie, to później jak będę mieć chwilę, to postaram się pomóc bardziej precyzyjnie ;).
Pozdrawiam.

0

Niestety dalej nie umiem rozwiązać opisanego problemu, mimo ze już poczytałem o tablicach.

0
int[] tabSingle = new int[3] { 2, 3, 4 };
int[, ,] tabMulti = new int[tabSingle[0], tabSingle[1], tabSingle[2]];
0

Kolego tyle to ja tez wiem, ale jak to zrobić w pętlach jeżeli ilość zmiennych w tablicy jednowymiarowej bedzie "zmienna"? czyli tak jak w PETLI 1 z tym że wielkośc tablicy pobierana jest dynamicznie skądyś indziej (np wpisuje wielkość w textboxa)...

0

Chcesz w zależności od rozmiaru pierwszej tablicy tworzyć tylu wymiarową następną tablicę?

tab[4] = {5, 4, 3, 2};
tabMulti[5][4][3][2];

Takie coś? Gdzie ilość wymiarów jest zależna od wielkości pierwszej tablicy?

tab[N] = {a, b, c, ... , n};
tabMulti[a][b]...[n];

To raczej nie do wykonania.

0

Czyli masz na wejściu tablicę jednowymiarową A o liczbie elementów n i liczbę wymiarów x tablicy wielowymiarowej będącą dzielnikiem n i chcesz swoją tablicę A podzielić na tablicę dwuwymiarową, której pierwszym wymiarem będzie x, a drugim n / x?

0

Podpowiem, że tablicę dwuwymiarową można z powodzeniem wcisnąć w tablicę jednowymiarową. Rozmiar takiej tablicy o rozmiarach m,n będzie m * n. Natomiast indeks oblicza się przez wzór index = x * n + y gdzie x < m i y < n. Teraz trzeba się zastanowić jak będzie wyglądać wzór dla 3 wymiarów i potem dla n wymiarów. Ja takie widzę rozwiązanie.

0

Witam, problem rozwiązałem sam. Poniżej zamieszczam przykładowe rozwiązanie jak elementy tablicy jednowymiarowej wpakować jako elementy dwuwymiarowej:


            dataScaled_in = new int[3];
            dataIncomingTable = new int[5, 3];
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    dataScaled_in[j] = j;
                    dataIncomingTable[i, j] = dataScaled_in[j];
                }
            }

Nadal jednak nie wiem jak zrobić żeby tablica dwuwymiarowa była napisana bez deklaracji wielkości (nieskończona) bo w moim przykładzie ogranicza ją [5,3]???

Może ktoś ma jakieś idea?!

Pozdrawiam
Oskar

0

Nie ma chyba nieskończonych tablic, wtf.

0

A czytałem o takim czymś jak List<int> ale nie wiem z czym to się je ^^ OMG

0

Gdybyś napisał po ludzku o co Ci chodzi, to już dawno otrzymałbyś pomoc.

0
            int n = 5, m = 3;
            dataScaled_in = new int[m];
            dataIncomingTable = new int[n, m];
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    dataScaled_in[j] = j;
                    dataIncomingTable[i, j] = dataScaled_in[j];
                }
            }

O to Ci chodziło? Tyle, że nadal stale określona jest liczba wymiarów

0

Witam.

Po tym co autor napisał domyślam się że lista tablic wystarczy:
Proponuję:

class Program
	{
		public static void Main(string[] args)
		{
			int[] tab = new int[] {3,4,5};
			List<int[]> lista = new List<int[]>();
			for (int i = 0; i < tab.Length; i++) {
				lista.Add(tablica(tab[i]));
			}
			
			for (int i = 0; i < lista.Count; i++) {
				Console.WriteLine(lista[i].Length.ToString());
					
			}
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
		public static int[] tablica(int n)
		{
			int[] tab = new int[n];
			return tab;
		}
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1