C# Kopiowanie tablic


(Marcin Obala) #1

Witam. Mam taki problem. Nie rozumiem jak przepisać z PHP na C# pewien kod.

Może podam najpierw kod w PHP.

$test = array();

$tablica; // tablica dwuwymiarowa przekazywana jako wartość do funkcji


$test[0][0] = $tablica; // w php to działa jednak ja nie wiem jak to na C# przepisać

Jak to działa skoro do 1 wymiaru tablicy test wpisuje dwuwymiarową tablicę

Jak można temu zaradzić?

:edit:

A może jest w C# jakiś typ danych który pozwala na takie zabiegi jak w PHP? Że np. do jednego elementu tablicy możemy przypisać liczbę, do innego tekst, do jeszcze innego inną tablicę.


(Fiołek) #2

Jaki iż PHP jest dynamicznie typowany to przypisanie tablicy do pewnej zmiennej "robi" zmienną tablicą.

@":edit": object.


(Jam1234) #3

Do kopiowania (wielowymiarowych też): Array.Copy()

Tak jak pisze fiołek, najprościej to wsadzić wszystko do tablicy objectów. Pamiętaj jednak o pakowaniu i odpakowywaniu typów bezpośrednich.


(Marcin Obala) #4

A teraz inne pytanie, mógłby ktoś wytłumaczyć w jaki sposób działa podana pętla? Niestety zasiedzenie się w C++ i C# sprawia że nie rozumiem zabiegów z PHP.

Mógłby ktoś wytłumaczyć tak po ludzku krok po kroku? Nie chodzi mi o operacje w środku, chodzi mi o deklarację pętli? O co w tym chodzi?

I jakby ktoś mógł wytłumaczyć co musi się kryć pod podanymi zmiennymi aby to wszystko działało.

  1. Dla mnie to jest tablica 2 wymiarowa jednak w PHP może to się inaczej nazywać, czemu tablica Current będąca dwuwymiarową w ifie jest odwołanie jakby to była tablica jednowymiarowa?

    foreach($Target as $a => $b)

    {

    foreach ($Combat[$a]['sd'] as $c => $d) 
    
    {
    
    	if (isset($Current[$c])) 
    
    	{
    
    		$ata[$c]['count'] = $ata_n[$c]['count'] - floor($d * rand(50, 100) / 100);
    
    		if ($ata_n[$c]['count'] <= 0) 
    
    		{
    
    			$ata_n[$c]['count'] = 0;
    
    		}
    
    	}
    
    }

    }


(Jam1234) #5

Nie znam PHP, ale...

  1. Zapytałem google'a o "php foreach" i http://pl.wikibooks.org/wiki/PHP/Instrukcja_foreach

  2. Wygląda mi to na słownik (tablica par klucz-wartość). W C# będzie to kolekcja to Dictrionary. Powyższy if (isset()) sprawdza obecność wpisu dla danego klucza. W C# odpowiada to metodzie ContainsKey(klucz) (jest jeszcze metoda TryGetValue(), która jednocześnie testuje obecność klucza i pobiera wartość, jeśli klucz jest w słowniku).