23 Ekim 2019 Çarşamba

bash kodlama - associative array

Giriş
declare -A ile map tanımlanır. Şöyle yaparız.
declare -A obj
obj["key1"]="val1"
obj["key2"]="val2"

for item in ${!obj[@]}; do
  echo "${obj[${item}]} ${item}"
done
Tüm Map'i Dolaşmak
Örnek
array isimli bir map olsun. !assoc[@] ile key'lere erişiriz. $i ile key değerine göre arama yaparız. Şöyle yaparız.
declare -A assoc=([foo]="123" [bar]="456")
for i in "${!assoc[@]}" ; do 
    echo "${assoc[$i]}"
done 
Örnek
Şöyle yaparız.
declare -a ratings

for movid in ...
do
  countLines=...
  sumRatings=...
  avgRating=...
  if [ $countLines -gt 100 ]
  then
    ratings[$movid]=$avgRating
  fi
done

for k in "${!ratings[@]}"
do
  echo $k'|'${ratings["$k"]}'
done
Map'te Arama Yapmak
Örnek
done isimli bir map tanımlayıp içinde arama yapmak için şöyle yaparız.
#!/bin/bash
# Keep an associative array of which names you have already processed
# Requires Bash 4
declare -A done
for file in 1/* 2/*; do
  base=${file#*/}  # trim directory prefix from value
  test "${done[$base]}" && continue
  : do things ...
  done["$base"]="$file"
done

Hiç yorum yok:

Yorum Gönder