Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Problem s vytvorenim seznamu v Bash/Shell

Dobry den, snazim se vytvorit seznam kde by mel kazdy uzivatel vlastni index 0, 1, 2, 3, 4 atd.. a po zadaní toho indexu a nazvu polozky by se vypsalo vse potrebne, ale porad mi to nejak nejde a tak chci pozadat zde zkusenych programatoru o pomoc. Zkousel jsem to takto, hledal jsem na netu ale konkretni reseni jsem nenasel. Dekuji predem za pomoc.

declare -A mylist

mylist=("jmeno" "prijmeni" "adresa")

mylist[0]['jmeno']="petr"
mylist[0]['prijmeni']="sulc"
mylist[0]['adresa']="ostrava 33"

echo ${mylist[0]['jmeno']} # petr
echo ${mylist[0]['prijmeni']} # sulc
echo ${mylist[0]['adresa']} # ostrava 33
Předmět Autor Datum
Ak správne rozumiem, tak chceš vnorené polia - indexované pole, ktorého elementy sú tvorené asociatí…
los 09.02.2016 19:03
los
Dobry den, moc dekuji, to vypada dobre, a pokud budu mit neco takoveho, declare -A mylist=(\ ['0|jm…
zacatecnik2 09.02.2016 19:24
zacatecnik2
Ak ti stačí len zoznam usporiadaných hodnôt veku, tak asi takto: declare -A mylist=( ['0|jmeno']="p… nový
los 09.02.2016 19:54
los
Ak ti stačí len zoznam usporiadaných hodnôt veku, tak asi takto: Staci mi to seradit jen podle veku… nový
zacatecnik2 09.02.2016 20:53
zacatecnik2
NodeJS je tiež command line bez GUI. Na rozdiel od bashu v ňom ale používaš jazyk, ktorý je určený n… nový
los 09.02.2016 22:24
los
Tak jsem zjistil, že je to celý nepoužitelný, jelikož to pole je přístupné jenom ve funkci ve které… poslední
zacatecnik2 10.02.2016 02:04
zacatecnik2

Ak správne rozumiem, tak chceš vnorené polia - indexované pole, ktorého elementy sú tvorené asociatívnymi poliami. Pokiaľ viem, tak toto bash neumožňuje (skúsenejší bashisti ma môžu opraviť).

Môžeš ale použiť jednoduché asociatívne pole, pričom kľúče budú zložené z indexov vnorených polí:

declare -A mylist=(\
	['0|jmeno']="petr"\
	['0|prijmeni']="sulc"\
	['0|adresa']="ostrava 33"\
)

echo ${mylist['0|jmeno']} # petr
echo ${mylist['0|prijmeni']} # sulc
echo ${mylist['0|adresa']} # ostrava 33

Dobry den, moc dekuji, to vypada dobre, a pokud budu mit neco takoveho,

declare -A mylist=(\
	['0|jmeno']="petr"\
	['0|prijmeni']="sulc"\
	['0|vek']="33"\
	['1|jmeno']="pavel"\
	['1|prijmeni']="novak"\
	['1|vek']="11"\
	['2|jmeno']="libor"\
	['2|prijmeni']="marku"\
	['2|vek']="20"\
)

pujde takove pole seradit treba podle veku ?

for ((i=0; i<${#mylist[@]}; i++))
do
  echo ${mylist['$i|vek']}
done

11
20
33

Ak ti stačí len zoznam usporiadaných hodnôt veku, tak asi takto:

declare -A mylist=(
	['0|jmeno']="petr"
	['0|prijmeni']="sulc"
	['0|vek']="33"
	['1|jmeno']="pavel"
	['1|prijmeni']="novak"
	['1|vek']="11"
	['2|jmeno']="libor"
	['2|prijmeni']="marku"
	['2|vek']="20"
)

for key in "${!mylist[@]}"
do
	if [ ${key/*|/} = "vek" ]; then
		echo ${mylist[$key]}
	fi
done | sort

Ak potrebuješ pristupovať k "celým objektom" (napr. usporiadať podľa veku a zobraziť meno), tak bude asi jednoduchšie použiť indexované pole, kde každá položka bude reťazec typu "jmeno|prijmeni|vek". Takéto reťazce môžeš potom usporiadavať typicky tak, že pred celý reťazec dáš podreťazec, podľa ktorého chceš usporiadavať, následne to usporiadaš a odstrániš ten reťazec.

Asi najjednoduchšie je napísať to v JavaScripte a spúšťať v nodejs.

Ak ti stačí len zoznam usporiadaných hodnôt veku, tak asi takto:

Staci mi to seradit jen podle veku ale potreboval bych to seradit primo v tom seznamu, ne jen pri vypise.

Ak potrebuješ pristupovať k "celým objektom" (napr. usporiadať podľa veku a zobraziť meno), tak bude asi jednoduchšie použiť indexované pole, kde každá položka bude reťazec typu "jmeno|prijmeni|vek". Takéto reťazce môžeš potom usporiadavať typicky tak, že pred celý reťazec dáš podreťazec, podľa ktorého chceš usporiadavať, následne to usporiadaš a odstrániš ten reťazec.

Jestli jsem to pochopil, tak tohle potřebuji, ale moc tomu nerozumim. Muzete mi to prosim jeste upresnit ?

Asi najjednoduchšie je napísať to v JavaScripte a spúšťať v nodejs.

Pobezi to pouze na serveru bez GUI, tak proto ten bash ;)

Dekuji

Zpět do poradny Odpovědět na původní otázku Nahoru