Zsh এসোসিয়েটিভ অ্যারে কী (বা k / v জোড়া) ওভার কি?


23

Zsh এ, আমি কোনও এসোসিয়েটিভ অ্যারেতে পুনরাবৃত্তি করতে চাই। আমার কী এবং মান উভয়ই দরকার। কিন্তু যখন আমি সাধারণত ( for x in $assoc_array) এর মিশ্রণ বিন্যাসে পুনরাবৃত্তি করি তখন আমি কেবল মান পাই।

সমস্ত উদাহরণ যা আমি দেখেছি তা দেখায় যে, একটি কী দেওয়া হলে আপনি তার মানটি কোনও এসোসিয়েটিভ অ্যারে থেকে পেতে পারেন। আমার সমস্যাটি শুরু করার জন্য কীগুলির সেট পাচ্ছে।

একটি মিশুক অ্যারে মধ্যে কি zsh কি পুনরুক্তি সমর্থন করে?


আপনার যদি কেবল একটি ছোট তালিকা রয়েছে তবে এটি একটি বিকল্প হতে পারে:for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
গণিত

উত্তর:


12

আপনি এই নিফটি প্যারামিটার সম্প্রসারণের সাথে একসাথে কী এবং মান উভয়ই পেতে পারেন:

for key val in ${(kv)assoc_array}; do
    echo "$key -> $val"
done

Zsh ম্যানুয়ালটিতে প্যারামিটার সম্প্রসারণের পতাকাগুলি দেখুন ।


এটি উপায় সহজ +1
টিমসাম

কী বা মানগুলির মধ্যে ফাঁকা স্থান থাকলে এটি কাজ করে না
ম্যাক কোপলান

30

আমি আমার প্রশ্ন জিজ্ঞাসা করার পরে অনুসন্ধান চালিয়ে গিয়েছিলাম এবং ইউনিক্স স্ট্যাকএক্সচেঞ্জ এ এই উত্তরটি পেয়েছি:

typeset -A assoc_array
assoc_array=(k1 v1 k2 v2 k3 v3)

for k in "${(@k)assoc_array}"; do
  echo "$k -> $assoc_array[$k]"
done

আউটপুট হল:

k1 -> v1
k2 -> v2
k3 -> v3

1
এটি যে কোনও কার্যকর উপায়ে পরীক্ষা করতে চাইছেন, বিল্টিন দিয়ে চেষ্টা করুন $options। (দেখুন man zshoptions)
এমভিসিএইচআর

কী যদি foo, বার ইত্যাদির মতো ক্রমবর্ধমান সংখ্যা না হয় তবে আর [foo] = বাজ?
টিমো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.