[c#] Tablica wielowymiarowa i foreach

0

Mam pytanie na temat związku tablic wielowymiarowych używania pętli foreach do jej odczytania i wyjątku index out of bounds, który mi wyskakuje przy zainicjowaniu kodu

int x = 0;

                        foreach (string i in subAtr)
                        {

                            appAtrybut = appData.CreateElement("atrybut");
                            atrID = appData.CreateAttribute("nazwa");
                            atrWartosc = appData.CreateAttribute("wartosc");

                            atrID.Value = subAtr[x, 0];
                            atrWartosc.Value = subAtr[x, 1];
                            
                            app.AppendChild(appAtrybut);
                            appAtrybut.Attributes.Append(atrID);
                            appAtrybut.Attributes.Append(atrWartosc);
                            
                            x++;
                        }

sprawdziłem tablice obu wymiarów są jednakowej długości i w tym momencie koncepcja mi się skończyła :<

0

Pokaż trochę więcej kodu - bo niewiele tu widać (zwłaszcza tablicę, o którą się rozchodzi)

0

Musisz się zdecydować czy używasz pętli for i samodzielnie indeksujesz tablicę, czy pętli foreach i korzystasz z pobranego elementu. Twój kod sugeruje że chcesz indeksować samodzielnie tablicę ale używasz pętli foreach, co sugeruje niezdecydowanie z Twojej strony:
Przeanalizuj poniższy kod:

            string[,] array = new string[5, 5];
            int length0 = array.GetLength(0);
            for (int i = 0; i < length0; i++)
            {
                int length1 = array.GetLength(1);
                for (int j = 0; j < length1; j++)
                {
                    array[i, j] = i.ToString() + j.ToString();
                }
            }
            foreach (string item in array)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();

A oto jego wynik:00 01 02 03 04 10 11 12 13 14 20 21 22 23 24 30 31 32 33 34 40 41 42 43 44
Widzimy więc że pętla foreach przechodzi przez całą tablicę a nie przez tylko jeden wiersz/kolumnę. Zgaduję że wymiar Twojej tablicy wynosi 2xN. Zgaduję też że w obu wierszach elementy o tym samym indeksie traktujemy jako wspólne dane(jest pomiędzy wierszami zależność). W takim razie może przeglądaj tablicę w taki sposób:

            string[,] array = new string[2, 5];
            int length0 = array.GetLength(0);
            for (int i = 0; i < length0; i++)
            {
                int length1 = array.GetLength(1);
                for (int j = 0; j < length1; j++)
                {
                    array[i, j] = i.ToString() + j.ToString();
                }
            }
            for (int i = 0; i < array.GetLength(1); i++)
            {
                Console.WriteLine(String.Format("[{0} - {1}] ", array[0, i], array[1, i]));
            }

Sugeruję jednak zamiast tworzenie tablicy kilku wymiarowej stworzenie klasy, która by miała dwa pola:ID, Wartość - stwórz tablicę takich obiektów, a od razu będziesz miał połączone dane ze sobą.

0

I gitara ;D znaczy się wystarczy że są dumpowane w tej postaci łączone są w następnej klasie która zrzuca je do xml ;D

0

Witam

Czy jest możliwość sumowania elementów tablicy poszarpanej za pomocą foreach?
Jedynie udało mi się za pomocą dodania elementów, oraz za pomocą pętli for.

		public double[][] Tablica = new double[2][];
	   	Tablica[0] = new double[2]{1, 2};
		Tablica[1] = new double[3]{7, 8, 9};
		double suma;
				  Tablica[0][0]=Convert.ToDouble(textBox1.Text);
				  Tablica[0][1]=Convert.ToDouble(textBox2.Text);
				  Tablica[1][0]=Convert.ToDouble(textBox3.Text);
				  Tablica[1][1]=Convert.ToDouble(textBox4.Text);
				  Tablica[1][2]=Convert.ToDouble(textBox5.Text);
				  suma= (Tablica[0][0]+Tablica[0][1]+Tablica[1][0]+Tablica[1][1]+Tablica[1][2]);
				  textBox6.Text=suma.ToString();
		public double[][] Tablica = new double[2][];
	   	Tablica[0] = new double[2]{1, 2};
		Tablica[1] = new double[3]{7, 8, 9};
		double suma=0;


				  for (int i = 0; i < Tablica.Length; i++)
				  {
					   for (int j = 0; j < Tablica[i].Length; j++)
					   {
						   suma=suma+Tablica[i][j];
                       }
				  }
				  textBox7.Text=suma.ToString();
0

Mozna i za pomocą foreach np tak:

// ...
// zakładamy ze Tablica to tablica "poszarpana" double
suma = 0;
foreach(double[] i in Tablica) // iteracja po tablicach
{
  foreach(double j in i) // iteracja po tablicy
  {
     suma += j;
  }
}

I w efekcie mamy elegancko zsumowaną tablicę :)

pozdro.

0

Muadib: jeśli to zrzucasz do XML, to stwórz osobną klasę z polami jak trzeba, potem listę lub tablicę tych elementów i użyj XMLSerializer...
Za dużo chcesz rzeźbić, pomijając to co we Frameworku już jest..

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