Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Epoxid
Člen
Avatar
Epoxid:14.12.2015 17:14

Zdravím,

vedel by mi niekto prosím vás poradiť

1.ako sa dá zoradiť viac rozmerne pole od najmenšieho po najväčšie číslo

int[,] poleA = new int [5,5] {{3,7,23,38,43},
                                         {12,18,33,40,45}; ...atd

klasické pole viem zoradiť týmto príkazom ...

int poleA = new int [5] {5,12,4,45,32};
Array.Sort(poleA); - na viac rozmerne pole mi to nefunguje :(

existuje na to nejaký príkaz jak napr (Array.Sort), alebo treba na to napísať algoritmus ?

2.ako sa dajú jednoducho porovnať dve polia aby som nemusel vypisovať všetky
súradnice...napr takto - if(poleA[0] == poleB[0......atd])
alebo porovnanie viac rozmerneho pola napr if(poleA[0,0] == poleB[0,0.....atd])

skúšal som to cez for cyklus kde som mal [x,y] polia pekne prešlo , len problém bol v tom že hneď jak našlo zhodu na niektorej súradnici cyklus skončil ,,a ja som potreboval aby ich prešiel všetky a skončil až keď sa budu všetky rovnať...

dopredu sa ospravedlňujem ak som niečo zle popísal, ale som len začiatočník čo ma veľa otázok ...

 
Odpovědět
14.12.2015 17:14
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Epoxid
Petr Čech:14.12.2015 18:17
  1. podle jakého klíče se má to pole řadit? Po sloupcích? Po řádkách?

    obávám se, že si budeš muset napsat vlastní algoritmus.

    podívej se sem, najdeš tam inspiraci: http://stackoverflow.com/…l-array-in-c

  2. bool arraysAreEqual = Enumerable.Se­quenceEqual(po­le1, pole2);
Editováno 14.12.2015 18:18
Nahoru Odpovědět
14.12.2015 18:17
the cake is a lie
Avatar
Odpovídá na Epoxid
Neaktivní uživatel:14.12.2015 19:14

1. Spoj to do jednoho pole, seřaď a znovu ulož do 2d pole

Nahoru Odpovědět
14.12.2015 19:14
Neaktivní uživatelský účet
Avatar
Antonín Tonini:14.12.2015 21:16

Pokud bys chtěl seřadit všechny prvky v tom poli A, tak bys musel udělat něco na způsob toho, co psal Posix. Pokud bys chtěl ale seřadit hodnoty v jednotlivých řádcích, tak jedna z možností je načítat jednotlivé řádky, které postupně budeš řadit a ukládat do nového dvourozměrného pole, a potom ho vrátíš.
Něco jako toto:

//poleA.Sort(out poleA);

public static void Sort(this int[,] data, out int[,] output)
        {
            int xLength = data.GetLength(0);
            int yLength = data.GetLength(1);
            int[,] twoDimension = new int[xLength, yLength];
            for (int x = 0; x < xLength; x++)
            {
                int[] array = new int[yLength];
                for (int y = 0; y < yLength; y++)
                {
                    array[y] = data[x, y];
                }
                Array.Sort(array);
                for (int y = 0; y < yLength; y++)
                {
                    twoDimension[x, y] = array[y];
                }
            }
            output = twoDimension;
        }

U sloupců by sis musel udělat vlastní funkci (tady nemáš Array.Sort), která ti bude porovnávat hodnoty na stejné pozici x, akorát si musíš uvědomit, které hodnoty ve kterém řádku můžeš porovnávat, abys pak náhodou neprohodil { 2, 3, 4 } a {3, 2, 4} jen na základě toho, že ve druhém řádku (poli) je na 2. pozici X - 2 a v prvním 3.

 
Nahoru Odpovědět
14.12.2015 21:16
Avatar
Odpovídá na Antonín Tonini
Antonín Tonini:14.12.2015 21:26

Ještě k tomu, co jsem psal. Vlastně si ani nemusíš to nové dvourozměrné pole vytvářet, jen bys přepsal ty hodnoty v původním poli.

 
Nahoru Odpovědět
14.12.2015 21:26
Avatar
Epoxid
Člen
Avatar
Odpovídá na Antonín Tonini
Epoxid:14.12.2015 21:49

1. No ja som vytvoril niečo takéto ;D, potreboval som aby sa každý riadok (v ktorom je 5 čísiel) zoradil zvlášť , Antonin ten cod co si poslal je ešte na mňa moc,ale zajtra ho preskúmam , Ďakujem za riešenia

int[] pole1 = new int[5];
int[,] pole2 = new int[2,5];

                // Zoradovanie
                for (int a = 0; a != 2; a++)
                {
                    for (int b = 0; b != 5; b++)
                    {

                        pole1[w] = generacnePole[a, b];
                        w++;
                        z++;
                        if (z == 5)
                        {
                            Array.Sort(pole1);
                            w = 0;
                            for (int x = 0; x != 1; x++)
                            {
                                for (int y = 0; y != 5; y++)
                                {

                                    pole2[x, y] = pole1[w];
                                    w++;

                                }
                            }
                            w = 0;

                        }

                        if (z == 10)
                        {
                            Array.Sort(pole1);
                            w = 0;
                            for (int x = 1; x != 2; x++)
                            {
                                for (int y = 0; y != 5; y++)
                                {
                                    pole2[x, y] = pole1[w];
                                    w++;
                                }
                            }

                           z = 0;
                           w = 0;
                        }

                    }
                }
                w = 0;
                generacnePole = pole2;
 
Nahoru Odpovědět
14.12.2015 21:49
Avatar
Odpovídá na Epoxid
Antonín Tonini:14.12.2015 22:31

Tady jsem ti to popsal:

public static void Sort(this int[,] data, out int[,] output)
       {
           //i značí číslo řádku
           //a značí číslo položky v řádku
           int iLength = data.GetLength(0); //Zde získáš délku pole (počet řádku) pomocí metody GetLength(0) s parametrem 0, který označuje 1. pole. Pokud máš tedy int[3,5], tak dostaneš 3 (řádky)
           int aLength = data.GetLength(1); //1 označuje 2. pole (počet položek v řádku)
           for (int i = 0; i < iLength; i++) //Zde procházíš 1. pole (řádky)
           {
               int[] array = new int[aLength]; //Vytvoření pole, jehož délka je rovna počtu položek v řádku
               for (int a = 0; a < aLength; a++) //Zde procházíš každou položku v tom řádku
               {
                   array[a] = data[i, a]; //Zde si na danou pozici v poli array nastavíš hodnotu z řádku, která je na stejné pozici
               }
               Array.Sort(array); //Zde máš metodu na seřazení hodnot
               for (int a = 0; a < aLength; a++) //Po seřazení znovu projedeš řádek a na dané pozice dvourozměrného pole zapíšeš nové hodnoty
               {
                   data[i, a] = array[a];
               }
           }
           output = data; //Zde vracíš upravené pole
       }
 
Nahoru Odpovědět
14.12.2015 22:31
Avatar
abushrek
Člen
Avatar
Odpovídá na Antonín Tonini
abushrek:19.12.2015 22:08

Proč používáš v parametrech zbytečně out a komplikuješ to když je začátečník. Měl jsi použít metodu s návratovým typem int[,] místo prázdného.
public static int[,] Sort(int[,] data)
{
//Tvůj kód
int iLength = data.GetLength(0); //Zde získáš délku pole (počet řádku) pomocí metody GetLength(0) s parametrem 0, který označuje 1. pole. Pokud máš tedy int[3,5], tak dostaneš 3 (řádky)
int aLength = data.GetLength(1); //1 označuje 2. pole (počet položek v řádku)
for (int i = 0; i < iLength; i++) //Zde procházíš 1. pole (řádky)
{
int[] array = new int[aLength]; //Vytvoření pole, jehož délka je rovna počtu položek v řádku
for (int a = 0; a < aLength; a++) //Zde procházíš každou položku v tom řádku
{
array[a] = data[i, a]; //Zde si na danou pozici v poli array nastavíš hodnotu z řádku, která je na stejné pozici
}
Array.Sort(array); //Zde máš metodu na seřazení hodnot
for (int a = 0; a < aLength; a++) //Po seřazení znovu projedeš řádek a na dané pozice dvourozměrného pole zapíšeš nové hodnoty
{
data[i, a] = array[a];
}
}
return data;
}

 
Nahoru Odpovědět
19.12.2015 22:08
Avatar
Epoxid
Člen
Avatar
Epoxid:29.12.2015 17:37

Ďakujem to zoraďovanie funguje super, ale nepodarilo sa mi rozchodiť to porovnávanie

bool arraysAreEqual = Enumerable.SequenceEqual(pole1, pole2);

píše mi tam error " expected"

 
Nahoru Odpovědět
29.12.2015 17:37
Avatar
Epoxid
Člen
Avatar
Epoxid:1.1.2016 17:07

Tak to porovnávanie som nakoniec doriešil predsa len cez for cyklus,, ale ak by mal niekto lepšie riešenie nech napíše :)

public void Porovnanie()
        {
            int number = 0;

            for (int x = 0; x < 5; x++)
            {
                for (int y = 0; y < 2; y++)
                {
                    if (generacnePole[x, y] == zasobnik[x, y])
                    {
                        number++;
                    }
                }
            }

            if (number == 10)
            {
                Console.WriteLine("zhoda");
                rovnost = false;
            }
        }
 
Nahoru Odpovědět
1.1.2016 17:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.