Ako usporiadať dátové pole. Ako prebieha triedenie polí? Zoraďte pole čísel vo vzostupnom poradí

Povedzme, že mám pole, ktoré simuluje databázovú tabuľku. Každý prvok poľa predstavuje riadok a vo vnútri každého riadka je ďalšie pole obsahujúce názvy a hodnoty polí.

Pole ( => Pole ( => "Sony TV" => 600,00) => Pole ( => "LG TV" => 350,00) => Pole ( => "Samsung TV" => 425,00) )

Čo chcem urobiť, je zoradiť riadky (prvky vonkajšieho poľa) podľa ceny. Nižšie je uvedený príklad toho, čo chcem dosiahnuť:

Pole ( => Pole ( => "LG TV" => 350,00) => Pole ( => "Samsung TV" => 425,00) => Pole ( => "Sony TV" => 600,00) )

Ako vidíte, nepotrebujem ukladať kľúče vonkajšieho poľa.

Musíte použiť usort, funkciu, ktorá triedi polia pomocou funkcie definovanej používateľom. Niečo ako:

Funkcia cmp($a, $b) ( if ($a["cena"] == $b["cena"]) ( návrat 0; ) návrat ($a["cena"]< $b["price"]) ? -1: 1; } usort($yourArray,"cmp")

Môžete použiť usort():

Funkcia sort($a, $b) (ak ($a["cena"] == $b["cena"]) návrat 0; návrat ($a["cena"] > $b["cena"]) ? 1: -1; ) usort($array, "sort");

Je ešte lepšie, ak vytvoríte takúto triedu na opätovné použitie kódu:

Trieda FieldSorter ( verejné $pole; funkcia __construct($pole) ( $toto->pole = $pole; ) funkcia cmp($a, $b) ( if ($a[$toto->pole] == $b[ $this->field]) návrat 0; návrat ($a[$this->field] > $b[$this->field]) ? 1: -1; ) ) $sorter = new FieldSorter("cena") ; usort($array, array($sorter, "cmp"));

Takto môžete jednoducho triediť podľa iných polí.

A hoci ste povedali, že kľúče vonkajšieho poľa nie je potrebné ukladať, môžete to ľahko dosiahnuť použitím uasort() namiesto usort .

Táto otázka je trochu stará, ale zanechá tu odpoveď pre budúcnosť.

Z funkcie php.net-Multisort môžeme použiť nižšie uvedený kód;

$data= [["zväzok" => 67, "vydanie" => 2],["zväzok" => 85, "vydanie" => 6],...]; foreach ($data ako $key => $row) ( $volume[$key] = $row["volume"]; $edition[$key] = $row["edition"]; ) array_multisort($volume, SORT_DESC , $edícia, SORT_ASC, $data);

Vyššie uvedené informácie sú pre statické triedenie údajov, kde manuálne meníte stĺpce triedenia.

Pre dynamickejší a robustnejší príklad zvážte nižšie;

Povedzme, že mám údaje uvedené nižšie;

$data = [, , , , , , ,....]

Ak potrebujeme zoradiť údaje poľa vyššie, môžeme nastaviť poradie zoradenia poľa pomocou syntaxe;

$qTable[$index]=$poradie_triedenia; Napr. $qTable=;

To znamená zoradiť stĺpec 1 ASC, stĺpec 4 DESC a potom stĺpec 3 ASC. Potom môžeme použiť nižšie uvedenú funkciu na triedenie údajov multimodálnej databázy;

Funkcia sortMulti($data, $orders) ( $args = ; foreach ($data ako $key => $row) ( foreach ($orders ako $index => $order) ( if (!isset($row[$index ])) pokračovať; //Ignorovať, ak stĺpec neexistuje $args[$index]["d"][$key] = $riadok[$index]; //Získať všetky hodnoty v stĺpci $args[ $index ]["o"] = "desc" == strtolower($order) ? SORT_DESC: SORT_ASC; //Získajte poradie zoradenia "ASC" je predvolené ) ) $p = ; //Nižšie musíme usporiadať položky ako argumenty pre array_multisort foreach ($args ako $arg) ( $p = $arg["d"]; $p = $arg["o"]; //Nižšie musíme skontrolovať, či stĺpec obsahuje iba číselné údaje alebo nie . / /Ak sú všetky hodnoty číselné, potom použijeme číselný príznak zoradenia, inak PRIRODZENÉ //Podporované ďalšie podmienky $p = count($arg["d"]) == count(array_filter($arg[" d"], "is_numeric")) ? SORT_NUMERIC: SORT_NATURAL; ) $p = &$data; //Prejsť odkazom call_user_func_array("array_multisort", $p); //Zavolajte vlastný multisort Php s parametrami v požadovanom poradí . return $data ; //Naše konečné pole zoradené. )

Potom ho môžeme použiť ako nižšie;

$data=[[...],[...],...]; $objednávka=; $sorted=sortMulti($data,$poradie); podľa $data=[[...],[...],...]; $objednávka=; $sorted=sortMulti($data,$poradie); podľa $data=[[...],[...],...]; $objednávka=; $sorted=sortMulti($data,$poradie); podľa $data=[[...],[...],...]; $objednávka=; $sorted=sortMulti($data,$poradie);

Pre údaje poľa kľúčových hodnôt. Napr. $data=[["c1"=>1212,"c2"=>"moje mená"],...]; Použite poradie ako $order=["c1"=>"desc","c10"=>"asc"];

Vyššie som testoval s radom 1 000 záznamov. Dúfam, že to niekomu pomôže.

Alternatíva usort je vytvoriť pole, ktoré indexuje pole, ktoré chcete triediť, a je indexované podľa údajov, ktoré chcete triediť.

V úryvku nižšie $customAttributes je pole objektov, podľa ktorých by som chcel triediť názov . Vytvorené najprv triediť $, indexované podľa názov a obsahuje index poľa zodpovedajúceho prvku $customAttributes .

$triediť = ; foreach($customAttributes as $c => $ca) ( $sort[$ca->name] = $c; )

Potom ksort používa sa na triedenie poľa podľa kľúča.

Ksort($sort);

Po triedenie pole $triediť, iterovanie cez to a vytváranie $objednané pole.

Známe sú výsledky streleckej súťaže 9 účastníkov. Usporiadajte tieto výsledky vo vzostupnom poradí bodov získaných počas streľby.

Algoritmus na riešenie tohto problému je z vyššie uvedených príkladov najkomplexnejší a vyžaduje použitie vnorených slučiek.

Jeden spôsob triedenia polí je nasledujúci. Najprv sa prvý prvok poľa v slučke porovná so všetkými zostávajúcimi prvkami. Ak má ďalší prvok poľa menšiu veľkosť ako prvý, potom sa tieto prvky vymenia. Porovnanie pokračuje ďalej pre aktualizovaný prvý prvok. V dôsledku konca tejto slučky sa nájde najmenší prvok poľa a umiestni sa na prvé miesto. Potom podobný proces pokračuje pre zostávajúce prvky poľa, t.j. druhý prvok sa porovná so všetkými ostatnými a v prípade potreby sa s nimi vymení. Po definovaní a nastavení druhého prvku poľa tento proces pokračuje pre tretí prvok, štvrtý prvok atď. Algoritmus sa dokončí, keď sa porovná a zoradí predposledný a posledný zostávajúci prvok poľa.

Program na implementáciu opísaného algoritmu môže mať nasledujúcu formu:

Program pr4;

Typ STREL=pole integer;

Var rez:strel;

i,j,s:integer;

Pre i:=1 až 9 urobte

writeln(‘Zadajte výsledky ",i,"tého účastníka");

readln(rez[i]);

pre i:=1 až 8 do

pre j:=i+1 až 9 do

ak rez[i]>rez[j] potom

s:=rez[j];

rez[j]:=rez[i];

rez[i]:=s;

writeln(‘Výsledky zoradené vzostupne:");

pre i:=1 až 9 napíšte (rez[i]:5," ‘);

Tu je STREL typ poľa výsledkov streľby účastníkov, rez[i] je premenná na opis výsledkov i-tého účastníka (i sa pohybuje od 1 do 9). Pomocná premenná s sa používa pri výmene prvkov poľa.

Algoritmus triedenia výberu v Turbo Pascal
Je zrejmé, že prvé miesto v poli by mal zaujať minimálny prvok poľa, druhé najmenší zo všetkých ostatných, tretie najmenší zo zostávajúcich atď.
Ak to chcete urobiť, musíte vykonať nasledujúcu postupnosť akcií:
1. Určite minimálny prvok poľa;
2. Vymeňte ho s prvým prvkom;
3. Určite minimálny prvok spomedzi zostávajúcich;
4. Vymeňte ho za druhý prvok atď.;
Táto postupnosť akcií sa musí vykonať až do určenia posledného minimálneho prvku.
Táto metóda sa nazýva triedenie výberu.
Celá operácia objednávania poľa sa dá rozdeliť na jednoduchšie úlohy a nazvať triedenie výberu.
Prvým je hľadanie minimálneho prvku. Navrhovaná časť programu vám pripomenie, ako sa to robí.

min:=m; (predpokladajme, že prvý prvok je minimálny)
t:=1; (a jeho číslo = 1)
PRE i:=1 AŽ 30 DO
ak m[i]> buf:=m[t]; (náhrada)
m[t]:=m[i];
m[i]:=buf;
KONIEC;

Opísaná metóda triedenia polí „selection sort“ sa dá použiť na triedenie polí vo vzostupnom poradí, ako aj na triedenie polí v zostupnom poradí. Aby ste to dosiahli, musíte jednoducho určiť nie minimálny prvok poľa, ale maximum. V texte programu je to vyjadrené nahradením znaku "" na niektorých miestach.


41. Sady v Pascale

Kopa je štruktúrovaný dátový typ, ktorý je súborom objektov prepojených nejakou charakteristikou alebo skupinou charakteristík, ktoré možno považovať za jeden celok. Každý objekt v množine sa nazýva prvok množiny.

Všetky prvky množiny musia patriť do jedného z ordinálnych typov obsahujúcich maximálne 256 hodnôt. Tento typ sa nazýva typ základnej sady. Základný typ je určený rozsahom alebo enumeráciou.

Rozsah hodnôt typu množiny je množina všetkých možných podmnožín zložených z prvkov základného typu. Vo výrazoch v jazyku Pascal sú hodnoty prvkov množiny uvedené v hranatých zátvorkách: , ["a",'b","c"], ["a".."z"].

Ak množina nemá žiadne prvky, nazýva sa prázdna a označuje sa ako . Počet prvkov množiny sa nazýva jej mohutnosť.

Sada môže mať všetky hodnoty základného typu. Základný typ nesmie presiahnuť 256 možných hodnôt. Preto základným typom množiny môže byť byte, char, boolean a typy od nich odvodené.

Sada v pamäti je uložená ako pole bitov, v ktorých každý bit označuje, či prvok patrí do deklarovanej sady alebo nie. Maximálny počet prvkov množiny je 256 a dáta typu množiny nemôžu zaberať viac ako 32 bajtov.

Počet bajtov pridelených pre dáta sady sa vypočíta podľa vzorca:

ByteSize = (max. dielik 8) - (min. dielik 8) + 1,

kde max a min sú horné a dolné hranice základného typu tejto množiny.

Číslo bajtu pre konkrétny prvok E sa vypočíta podľa vzorca:

ByteNumber = (E div 8) - (min. div 8),

číslo bitu vo vnútri tohto bajtu podľa vzorca:

BitNumber = E mod 8

Na poradí, v akom sú prvky množiny zapísané vo vnútri konštruktora, nezáleží. Napríklad a sú ekvivalentné sady.

Každý prvok v súprave sa počíta iba raz. Sada je teda ekvivalentná.

Premenné viacerých typov sú opísané nasledovne:
Var<идентификатор>: sada<базовый тип>;

Napríklad:

Var A, D: Set Of Byte; B: Množina "a".."z"; C: Sada Boolean;

Nemôžete zadávať hodnoty do viacnásobnej premennej pomocou vstupnej procedúry a vydávať ich pomocou výstupnej procedúry.

Viacnásobnej premennej možno zadať konkrétnu hodnotu iba vykonaním operátora priradenia:
<множественная переменная> := <множественное выражение>;

Napríklad:

A: = ;B: = ["m", "n", "k"]; C: =; D:=A;

Okrem toho môžu výrazy zahŕňať množinové operácie.

Nastaviť operácie

asociácie dve množiny A a B je množina pozostávajúca z prvkov obsiahnutých aspoň v jednej z množín A alebo B. Znamienko pre operáciu zjednotenia v jazyku Pascal je „+“.

1) + => 2) +['a'..'z']+['A'..'E', 'k'] => ['A'..'E', 'a'.. 'z']3) + =>

Krížením dve množiny A a B je množina pozostávajúca z prvkov súčasne zahrnutých v množine A a množine B.

Značka prevádzky na križovatke v jazyku Pascal „*“

1) * => 2) [‚a‘..‘z‘]*[‘A‘..‘E‘, ‚k‘] => [‘k‘]3) * =>

Rozdielom dve množiny A a B je množina pozostávajúca z prvkov množiny A, ktoré nie sú zahrnuté v množine B.

1a) - => 1b) - => 2a) ['a'..'z']-['A'..'E', 'k'] => ['a'..'j', ' i'..'z']2b) ['A'..'E', 'k'] - ['a'..'z'] => ['A'..'E']3a) - => 3b) - =>

Vstupná operácia. Toto je operácia, ktorá vytvára spojenie medzi množinou a skalárnou veličinou, ktorej typ sa zhoduje so základným typom množiny. Ak x je taká skalárna veličina a M je množina, operácia výskytu sa zapíše takto: x v M.

Výsledkom je logická hodnota true, ak je hodnota x zahrnutá v množine M, a inak nepravda.

Napríklad 4 in je pravda, 5 in je nepravda.

Pomocou tejto operácie môžete nielen pracovať s prvkami množiny, ale aj keď množiny nie sú explicitne použité pri riešení problému, niektoré logické výrazy možno napísať stručnejšie.

1) Prirodzené číslo n je dvojciferné. Namiesto výrazu (n >= 10) a (n<=99) dá sa zapísať n v.

2) Symbol c je ruské písmeno. Namiesto výrazu (c >= „A“) a (c<= ‘Я’) or (c>= „a“) ​​a (c<=‘п’) or (c>= „p“) a (c<=‘я’) píšeme c v [‚A‘.. ‚I‘, ‚a‘.. ‚p‘, ‚r‘.. ‚i‘] atď.

Pomocou operácie zjednotenia môžete do množiny pridať nový prvok. Napríklad a:= a+ Procedúra Include je určená na rovnaké účely v Turbo Pascal 7.0: zahŕňať (M, A) M je množina, A je premenná rovnakého typu ako prvky množiny M. Rovnaký príklad môžeme napísať takto: Include (a, 5)

Prvok môžete vylúčiť zo množiny pomocou operácie „nastaviť rozdiel“. Napríklad a:= a- Procedúra Exclude je určená na rovnaké účely v Turbo Pascal 7.0: vylúčiť (M, A) M je množina, A je premenná rovnakého typu ako prvky množiny M. Rovnaký príklad môžeme napísať takto: Vylúčiť (a, 5)

Pozrime sa na niekoľko príkladov použitia množín pri riešení úloh.

Úloha 1. V meste je n vysokých škôl, ktoré nakupujú výpočtovú techniku. Existuje šesť počítačových spoločností: Dialog, Avicom, Neta, Server, Dekada, Dega.ru. Odpovedaj na nasledujúce otázky:
1) od ktorých spoločností uskutočnila nákup každá z univerzít?
2) v ktorých spoločnostiach bol nákup uskutočnený aspoň jednou z univerzít?
3) od ktorých spoločností niektorá z univerzít nakupovala počítače?

Vyriešme problém pomocou sád. Pre uľahčenie ďalšej manipulácie očíslujeme počítačové spoločnosti v nasledujúcom poradí, počnúc jednotkou. Doplňme informácie o mieste nákupu počítačov každou z univerzít do samostatného súboru.

Odpoveď na prvú otázku možno získať pretínaním všetkých takýchto množín.

Odpoveď na druhú otázku je výsledkom kombinovania zostáv.

A nakoniec k poslednému – rozdiel medzi súborom všetkých firiem a súborom firiem, kde nakupovala aspoň jedna univerzita.

Program ex_set_1;typ firma = sada 1..6; v = pole firmy;const f: pole string = ("Dialóg", "Avicom", "Neta", "Server", "Decade", "Dega.ru"); (postup zadávania informácií o nákupe počítače pre ďalšiu firmu)postup vvod(var a: firma);var i: byte; ans: 0..1;začiatok a:= ; for i:= 1 až 6 do begin Napíšte("Univerzita kúpila počítače od firmy ", f[i], " (1 - áno, 0 - nie)? "); ReadLn(ans); ak ans = 1 potom a:=a+[i] end;end;(postup pre tlač prvkov poľa, ktorých čísla sú obsiahnuté v množine) procedure Print(a: firma);var i: byte;begin for i:= 1 to 6 do if i in a then write(f[i]:10); writelnend;(Postup, ktorý odpovedá na prvú otázku)postup Rez1(a: v; n: byte; var b: firma);var i: byte;begin b:= ; for i:= 0 až n-1 do b:= b * a[i];end;(Postup, ktorý odpovedá na druhú otázku)postup Rez2(a: v; n: byte; var b: firma);var i : byte;begin b:= ; pre i:= 0 až n-1 do b:= b + a[i];koniec;var a: v; n, i: bajt; c: firma;begin write("Koľko univerzít uskutočnilo nákup?"); readln(n); pre i:= 0 až n-1 do vvod(a[i]); Rezl(a, n, c); writeln("Každá z univerzít kúpila počítače od spoločností: "); Tlač (c); Rez2(a, n, c); writeln("Aspoň jedna z univerzít kúpila počítače od spoločností: "); Tlač (c); writeln("Žiadna z univerzít nenakupovala počítače od spoločností: "); Tlač(-c);koniec.

Úloha 2. Generovať n sady (číslovanie začína od 1). Vytlačte prvky, ktoré sú súčasťou všetkých sád s číslami deliteľnými tromi, ale nie sú zahrnuté v prvej sade.

Program ex_set_2;typ mn = sada bajtov; v = pole mn;(postup na zadávanie informácií do ďalšej množiny) procedure vvod(var a: mn);var i, n, vsp: byte;začiatok a:= ; n:= 1 +náhodne(200); for i:= 1 až n do begin vsp:= random(256); a:=a+ end;end;(postup pre tlač prvkov sady)procedúra Tlač(a: mn);var i: byte;začiatok pre i:= 0 až 255 do if i in a then write(i:4); writelnend;(Postup, ktorý odpovedá na otázku)postup Rez(a: v; n: byte; var b: mn);var i: byte;begin b:= ; i:= 3; kým<= n do begin b:= b * a[i]; i:= i + 3 end; b:= b - aend;var a: v; n, i: byte; c: mn;begin randomize; write("Сколько множеств? "); readln(n); for i:= 1 to n do begin vvod(a[i]); print (a[i]) end; Rez(a, n, c); Print(c);end.

Program ex_set_3;var m: sada znakov; s:string; i: byte;begin write("Zadajte reťazec: "); readln(s); m:=; i:= 1; kým<= length(s) do if s[i] in m then delete(s, i, 1) else begin m:=m+]; i:= i + 1 end; writeln(s)end.

42. Program na vyhľadávanie počtu konkrétnych znakov v texte.

Tu sú uvedené najčastejšie používané funkcie. Uveďme príklad programu, ktorý určuje počet znakov a slov v ľubovoľnom reťazci znakov.

program pr28;

const ÁNO=1; (Konštanty, ktoré určujú, či )

NO = 0; (aktuálny charakter prvku slova)

str:string;

nw, (Počet slov)

nc, (počet znakov)

inword:integer; (Premenná, ktorá nadobúda hodnoty

konštanty ÁNO alebo NIE)

i:integer;

writeln("Zadajte reťazec znakov:");

read(str);

nw:=0;nc:=0;inword:=NO;

for i:=1 to length(str) do

nc:=nc+1;

if str[i] v [":",".",",",""",",",",";"," "](Ak oddeľovač,)

potom inword:=NO (potom je aktuálny znak mimo slova)

ak inword=NIE tak

začať inword:=ÁNO;

nw:=nw+1;

writeln("nc=",nc,"nw=",nw);


43. Typ údajových znakov v jazyku Turbo Pascal.

Inštrukcie

Existuje niekoľko spôsobov, ako triediť pole. Najjednoduchšie je algoritmizovať „bublinové“ triedenie, ale je tiež jedným z najpomalších. Podstatou tejto metódy je postupné prechádzanie dátovým poľom a porovnávanie každej dvojice prvkov. Ak je spodný prvok menší ako predchádzajúci, miesta sa vymenia. Potom sa algoritmus spustí odznova. Príklad triediaceho kódu v C:

int hmotnosť;
int el_min=10;

pre (int i=0; ii; j--)
ak (menej(hmotnosť [j], hmotnosť ))
swap(hmotnosť [j], hmotnosť);
}

Jedným z optimálnych algoritmov na triedenie poľa vo vzostupnom poradí je zoradenie pomocou metódy vkladania. Podstatou algoritmu je vytvoriť danú postupnosť medzi skupinou prvkov (vo vzostupnom poradí). Špeciálny obslužný program v slučke kontroluje usporiadanie poľa. Ak chcete triediť vo vzostupnom poradí, nastavte nasledujúcu podmienku. Ak je nasledujúci prvok menší ako predchádzajúci, odstráni sa zo svojho miesta a umiestni sa na prvok, ktorý zodpovedá jeho hodnote. Príklad kódu pre program vzostupného triedenia v jazyku C:

int Kol = 40;
int hmotnosť, k;

for (int i = 1, j = 0; i(
k = hmotnosť [i]; // pomocná premenná na uloženie prvku poľa
j = i-1;
zatiaľ čo(k(
hmotnosť = hmotnosť [j];
j--;
if (j hmotnosť = k;
}
}

Ďalšou bežne používanou metódou triedenia je objednávkový algoritmus, ktorý hľadá minimálny alebo maximálny prvok v poli. Pri vzostupnom radení sa v momente prvého prechodu poľom nájde jeho prvok s minimálnou hodnotou a umiestni sa na začiatok poľa. Prvok, ktorý predtým obsadil prvú pozíciu, je nainštalovaný na svojom mieste. Pri ďalšom skúmaní poľa sa vyplnený priestor eliminuje. Hľadá sa ďalší minimálny prvok, umiestni sa na druhé miesto a tak ďalej, až kým sa nezoradí celé pole. Kód na triedenie nájdením minimálneho prvku zoznamu:

int hmotnosť, bb;
int Kol = 30, min, pоs;

for (int i = 0; i(
min = hmotnosť [i];
poz = i;
for (int j=0; j (
if (hmotnosť [j] (
min = hmotnosť [j];
pos = j;
}
bb = hmotnosť [i];
hmotnosť[i] = hmotnosť;
hmotnosť = bb;
}
}

Spôsob usporiadania prvkov poľa závisí od nástrojov, ktoré máte k dispozícii. Nižšie je uvedených niekoľko možností na objednanie jednorozmerných polí pomocou najbežnejšieho programovacieho jazyka na strane servera, PHP. Pri používaní tohto jazyka nemusíte nezávisle skladať funkcie na iteráciu cez prvky poľa, ich porovnávanie a priraďovanie nových hodnôt - to všetko robia vstavané funkcie.

Inštrukcie

Ak potrebujete usporiadať údaje do poľa vo vzostupnom poradí, použite funkciu sort(). Napríklad: $values ​​​​= array(58, 15, 2,41, 26, 30);
sort($values); V dôsledku aplikácie sa umiestnenie údajov v poli zmení - bude to takto: (2.41, 15, 26, 30, 58). Ak do volania funkcie pridáte príznak SORT_STRING, funkcia bude považovať údaje poľa za reťazce a usporiada ich podľa . Keďže znamienko reťazcovej premennej „2.41“ sa nachádza ďalej v abecede ako prvé znamienko reťazcovej premennej „15“, po použití funkcie sort($values, SORT_STRING) budú premenné zoradené inak: (15, 2,41, 26, 30, 58).

Ak potrebujete zoradiť pole v zostupnom poradí jeho hodnôt, použite funkciu rsort(). Táto funkcia sa líši od funkcie opísanej v prvom kroku iba v poradí triedenia.

Funkciu asort() použite, keď chcete zoradiť hodnoty pomenovaného (asociatívneho) poľa vo vzostupnom poradí bez toho, aby ste zmenili pôvodné mapovania medzi indexom a hodnotou každého prvku poľa. Napríklad: $values ​​​​= array("jeden" => 58, "dva" => 15, "tri" => 2,41, "štyri" => 26, "päť" => 30);
asort($values); V dôsledku toho bude poradie prvkov poľa nasledovné: ("tri" => 2,41, "dva" => 15, "štyri" => 26, "päť" => 30, "jeden" => 58). Inak sa činnosť tejto funkcie nelíši od funkcie triedenia opísanej v prvom kroku. Ak chcete podobne usporiadať prvky v zostupnom poradí, použite funkciu arsort().

Dobrý deň, milí čitatelia nášho blogu! Na našej stránke sme sa už dotkli témy polí a toto bol príklad, ako na to. Už tu bol aj článok o tom, ako sa na vyriešenie tohto problému použili aj polia. A dnes budeme hovoriť o ako triediť viacrozmerné pole. Tak poďme na to.
Zoberme si pole „tovaru“ takto:

200, "výroba" => "Telina LLP"); $tovar = array("cena" => 400, "výroba" => "IP Devyatkin"); $tovar = array("cena" => 800, "výroba" => "JSC Agrarnik"); $tovar = array("cena" => 790, "výroba" => "Krasny Vostok as"); ?>

Toto pole musíte zoradiť podľa kľúča. Na tento účel použijeme funkciu „ksort“:

ksort($tovar); print_r($tovar); ?>

Výsledkom je zoradené pole podľa kľúča:

Pole ( => Pole ( => 400 => Individuálny podnikateľ Devjatkin) => Pole ( => 200 => Tselina LLP) => Pole ( => 800 => JSC Agrarnik) => Pole ( => 790 => JSC Krasny Vostok ))

Ako vidíte, kľúče sú vo vzostupnom poradí od 45 do 89. Teraz musíme zoradiť pole podľa hodnoty kľúča „cena“. Na tento účel použijeme funkciu „uasort“ a napíšeme vlastnú funkciu "sort_p" pre to:

sort_p($a, $b) ( return strcmp($a["cena"], $b["cena"]); ) uasort($tovar, "sort_p"); print_r($tovar); ?>

Výsledkom je zoradené pole podľa kľúča „cena“:

Pole ( => Pole ( => 200 => Tselina LLP) => Pole ( => 400 => IP Devyatkin) => Array ( => 790 => JSC Krasny Vostok) => Pole ( => 800 => JSC Agrarnik))

Ako vidíte, hodnoty kľúča „cena“ sú vo vzostupnom poradí od 200 do 800. Aby sa hodnoty kľúča „cena“ pohybovali v opačnom poradí, v zostupnom poradí, vymeníme parametre Funkcia „strcmp“ v užívateľom definovanej funkcii „sort_p“:

b["cena"], $ a["cena"]); ) uasort($tovar, "triediť_p"); print_r($tovar); ?>

Dostaneme nasledujúci výsledok:

Pole ( => Pole ( => 800 => JSC Agrarnik) => Pole ( => 790 => JSC Krasny Vostok) => Pole ( => 400 => IP Devyatkin) => Array ( => 200 => Tselina LLP))

Ako vidíte, hodnoty kľúča „cena“ sú teraz v zostupnom poradí od 800 do 200. Teraz musíme pole zoradiť podľa hodnoty dvoch kľúčov „výroba“ a „cena“, na tento účel napíše vlastnú funkciu „sort_pm“:

sort_pm($a, $b) ( $r1 = strcmp($a["výroba"], $b["výroba"]$a["cena"], $b["cena"]) : $r1; ) uasort ($tovar, "sort_pm"); print_r($tovar); ?>

Teraz prebieha triedenie podľa hodnôt dvoch kľúčov vo vzostupnom poradí, pričom prioritou je kľúč „výroba“.

Pole ( => Pole ( => 800 => JSC Agrarnik) => Pole ( => 790 => JSC Krasny Vostok) => Pole ( => 400 => IP Devyatkin) => Pole ( => 200 => Tselina LLP))

Ak uprednostňujete hodnoty kľúča „cena“, potom vymeňte parametre funkcií „strcmp“ a napíšte funkciu „sort_pm“ nasledovne:

$a["price"], $b["price"]); návrat ($r1 == 0) ? strcmp(): $r1; ) uasort($tovar, "triediť_pm"); print_r($tovar); ?>

To znamená, že parametre funkcií „strcmp“ boli zmenené. Teraz budú mať prioritu hodnoty kľúča „cena“, čo znamená, že triedenie vykonajú najskôr oni, potom sa zoradia hodnoty kľúča „výroba“. Vysvetlíme si to na nasledujúcom príklade:

200, "výroba" => "Telina LLP"); $tovar = array("cena" => 400, "výroba" => "IP Devyatkin"); $tovar = array("cena" => 400, "výroba" => "Dovolenka JSC");$tovar = array("cena" => 800, "výroba" => "JSC Agrarnik"); $tovar = array("cena" => 790, "výroba" => "Krasny Vostok as"); funkcia sort_pm($a, $b) ( $r1 = strcmp( $a["price"], $b["price"]); návrat ($r1 == 0) ? strcmp( $a["výroba"], $b["výroba"]): $r1; ) uasort($tovar, "triediť_pm"); print_r($tovar); ?>

Čím väčšie je pole analyzovaných údajov, tým ťažšie je sústrediť sa na jeho hlavné charakteristiky. Ak chcete lepšie pochopiť informácie obsiahnuté v súbore údajov, musia byť správne usporiadané. Na tento účel použite buď usporiadané pole alebo diagram stonky a listu.

Objednané pole

Usporiadané pole (nie nevyhnutne jednorozmerné) pozostáva zo sekvencie údajov usporiadaných vo vzostupnom poradí. Napríklad tabuľka (obr. 1) obsahuje ukazovatele päťročného priemerného ročného výnosu 158 fondov. Usporiadané polia vám umožňujú okamžite určiť minimálne a maximálne hodnoty, typické hodnoty, ako aj rozsah, do ktorého patrí väčšina hodnôt.

Ryža. 1. Usporiadané pole obsahujúce údaje o päťročnom priemernom ročnom výnose 158 fondov zameraných na rýchly rast kapitálu za obdobie od 1. januára 1997 do 31. decembra 2001

Stiahnite si poznámku vo formáte alebo formáte, príklady vo formáte

Je vidieť, že najnižšia úroveň päťročného priemerného ročného výnosu je -6,1 % ročne a najvyššia dosahuje 26,3 %. Priemerná ročná výkonnosť väčšiny fondov sa navyše pohybuje od 5 do 15 %. Prezentácia údajov vo forme dvojrozmerného poľa (ako na obr. 1) však nie je optimálna, pretože vám neumožňuje rýchlo a jednoducho vytvoriť kontingenčnú tabuľku. Preto odporúčam vytvárať jednorozmerné vertikálne usporiadané polia. Excel ponúka niekoľko možností, ako to urobiť.

Uvažujme ako prierezový príklad priemerné mesačné júlové teploty v Moskve za 130 rokov pozorovaní (obr. 2).

Ryža. 2. Priemerná mesačná teplota v júli v Moskve; počiatočné údaje

Najjednoduchší spôsob usporiadania množiny údajov poskytuje možnosť Excel Triediť. Vyberte stĺpce A a B; prejdite do menu Údaje → Triedenie (obr. 3). Otvorí sa ponuka Triedenie. V teréne Triediť podľa vyberte Priemerná júlová teplota, °C, v teréne objednaťVzostupne. Kliknite na tlačidlo OK.

Ryža. 3. Triedenie údajov

Dostanete zoznam zoradený (zoradený) podľa teploty (obr. 4). Okamžite je jasné, že minimálna priemerná mesačná teplota v júli bola zaznamenaná v Moskve v roku 1904 - 14,6 ° C a najvyššia - v roku 2010 - 26,1 ° C. Pravdepodobne si pamätáte tento hrozný rok!? Upozorňujeme, že predchádzajúci rekord bol prekonaný o viac ako 10 %.

Ryža. 4. Usporiadaný zoznam

Schéma kmeňa a listov

Diagram stonky a listu je nástrojom pre vizuálny organizovanie súboru údajov a analýza jeho distribúcie. Údaje v grafe sú rozdelené podľa počiatočných čísel alebo kmeňov a koncových čísel alebo listov. Napríklad číslo 18,9 v diagrame kmeňa a listov pozostáva z kmeňa 18 a listu 9 (obr. 5). Bohužiaľ, Excel nevytvorí automaticky kmeňový a listový graf. Preto použijeme manuálny postup. Ako kmeň používame celú časť teploty a ako listy desatinnú časť (pozri vzorce na hárku „Kmeň a listy“ súboru Excel; najprv som zvýraznil zlomkovú časť, potom som zlomky preniesol zo stĺpcov do riadkov a nakoniec naformátovať graf, aby bol viditeľnejší).

Ryža. 5. Schéma kmeňa a listov

Diagram stonky a listu vizualizuje veľké množstvo informácií. Napríklad z neho môžete priamo určiť minimálne (14,6) a maximálne (26,1) hodnoty. Je vidieť, že väčšina hodnôt sa pohybuje v rozmedzí 16...20°C a samotné hodnoty tvoria priemer okolo 18°C. V oblasti b je tiež pomerne široký chvost O vyššie hodnoty.

Testovacie úlohy

  1. Nižšie uvedené údaje obsahujú počet šekov vrátených 23 bankami svojim vkladateľom z dôvodu nedostatku finančných prostriedkov na účte. (Minimálna výška vkladu by nemala byť nižšia ako 100 USD): 26 28 20 20 21 22 25 25 18 25 15 20 18 20 25 25 22 30 30 30 15 20 29.
    1. Zostrojte diagram stonky a listu obsahujúci dané údaje.
    2. Určte hodnotu, okolo ktorej je sústredené rozdelenie počtu vrátených šekov.
  2. Nižšie uvedené údaje zobrazujú mesačné poplatky za služby (v dolároch), ktoré 26 bánk účtuje svojim zákazníkom, ak je zostatok na účte zákazníka nižší ako minimum 1 500 USD: 12 8 5 5 6 6 10 10 9 7 10 7 7 5 0 10 6 9 12 0 5 10 8 5 5 9.
    1. Vytvorte usporiadané pole obsahujúce zadané údaje.
    2. Zostrojte diagram stonky a listu obsahujúci dané údaje.
    3. Ktorý spôsob prezentácie údajov je informatívnejší? Svoju odpoveď zdôvodnite.
    4. Určte hodnotu, okolo ktorej sa sústreďuje rozdelenie mesačnej platby za bankové služby.

Odpovede na testovacie úlohy

1. Pozrite si list „Controll1“ súboru Excel a Obr. 6. Diagram stonky a listu je informatívnejší ako usporiadané pole, pretože lepšie zobrazuje údaje. Priemerná hodnota je približne 22. Trik na prácu spočíva vo výbere kroku pre hodnoty kmeňa. Ak zvolíte počet desiatok (10, 20, 30) ako krok, diagram „kmeň a listy“ stratí svoju prehľadnosť.