আলাদা ধরণের অ্যারে ব্যবহার করুন: একটি পূর্ণসংখ্যার-সূচকযুক্ত অ্যারের পরিবর্তে কোনও এসোসিয়েটিভ অ্যারে ব্যবহার করুন, সুতরাং কী (সূচক) আপনি যা যা পরীক্ষা করে দেখবেন। bash-4.0
বা পরে এর জন্য প্রয়োজন।
declare -A array1=(
[prova1]=1 [prova2]=1 [slack64]=1
)
a=slack64
[[ -n "${array1[$a]}" ]] && printf '%s is in array\n' "$a"
উপরের দিকে আমরা সত্যিকারের মূল্যবোধগুলির যত্ন নিই না, এগুলির জন্য তাদের কেবল খালি থাকা দরকার। আপনি কী এবং মান বিনিময় করে একটি সূচকযুক্ত অ্যারেটিকে নতুন এসোসিয়েটিভ অ্যারে রূপান্তর করতে পারেন:
declare -a array1=(
prova1 prova2 slack64
)
declare -A map # required: declare explicit associative array
for key in "${!array1[@]}"; do map[${array1[$key]}]="$key"; done # see below
a=slack64
[[ -n "${map[$a]}" ]] && printf '%s is in array\n' "$a"
যদি আপনার বড় অ্যারে থাকে যা ঘন ঘন অনুসন্ধান করা হয় তবে এটি পরিশোধ করতে পারে, যেহেতু এসোসিয়েটিভ অ্যারের প্রয়োগটি অ্যারে-ট্র্যাভার্সিং লুপগুলির চেয়ে আরও ভাল সম্পাদন করবে। এটি প্রতিটি ব্যবহারের ক্ষেত্রে উপযুক্ত হবে না, যেহেতু এটি ডুপ্লিকেটগুলি হ্যান্ডেল করতে পারে না (যদিও আপনি উপরে 1 টির পরিবর্তে মানটিকে কাউন্টার হিসাবে ব্যবহার করতে পারেন) এবং এটি খালি সূচকটি পরিচালনা করতে পারে না।
"বিপর্যয়" ব্যাখ্যা করার জন্য উপরের জটিল লাইনটি ভেঙে দেওয়া:
for key in "${!a[@]}" # expand the array indexes to a list of words
do
map[${a[$key]}]="$key" # exchange the value ${a[$key]} with the index $key
done
array1
কাজ?