#!/bin/bash

#Assosiatiivinen matriisi:
#=========================
#Alustus: declare -A Asso
#arvon määrääminen jäsenelle: Asso['osoite' joka voi olla lukuarvo, aakkonen, tai teksti]=arvo joka voi olla lukuarvo, aakkonen, tai teksti 
#- jäsenelle voi antaa myös sen tekstin jolla funktiota kutsutaan. Myöhemmin se voidaan toteuttaa: $(echo ${Asso['osoite']})  
#- jäsenen arvon tulostus=echo ${Asso[osoite]} 

#koko assosiatiivisen matriisin listaaminen: for i in "${!Asso[@]}"; do echo "avain: $i"; echo "arvo : ${Asso[$i]}"; echo; done

#For looping, to access all keys
#${!MY_VARIABLE[@]}
 
declare -gA matriisi # Assosiatiivinen matriisi sorttaa automaattisesti itsensä sitämukaa kun sen jäsenille annetaan arvoja.

function talleta_matriisi () { # jäsenien lukumäärä saa olla mikähyvänsä niinkuin matriisin nimikin.  
eval echo -e \${$1[*]} > /tmp/delme1   # arvot  
eval echo -e \${!$1[*]} > /tmp/delme2  # osoitteet   
}

function lue_matriisi () { # jäsenien lukumäärä saa olla mikähyvänsä niinkuin matriisin nimikin.
  arvot=($( cat /tmp/delme1)); osoitteet=($( cat /tmp/delme2)); for (( n=0; n<${#arvot[@]}; n++ )); do eval $1[${osoitteet[$n]}]=${arvot[$n]}; done    # $1[${arvot[$n]}]; done
}

function tulosta_matriisi () { # jäsenien lukumäärä saa olla mikähyvänsä niinkuin matriisin nimikin. 
( echo -n 'jäsenten arvot   : '; eval echo \${$1[*]}
echo -n 'jäsenten osoitteet : '; eval echo \${!$1[*]} ) | column -t
}

matriisi[yksi]=ykkönen
matriisi[555]=2
matriisi[17]=3
matriisi[2]=4
talleta_matriisi matriisi
unset matriisi # unset nollaa matriisin joten voi olla varma että matriisi on luettu levyltä.
lue_matriisi matriisi
tulosta_matriisi matriisi
