Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Is there an idiom for converting an array to an associative array?



Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> writes:

> On Jan 15,  9:05am, Matt Armstrong wrote:
> }
> } I'm looking for an idiom that will convert the array (a b c) into
> } (a "" b "" c "") so I can assign it easily to an associative array.
>
> As it happens ...
>
>     typeset "assoc[${^array[@]}]=''"
>
> should do that particular thing quite effectively, provided that none
> of the values of $array is * or @.

Thanks, I'll give it a whirl, and then study it for a couple of hours
to figure out how it works.  :-)


> } Right now I've got ugliness like this:
> } 
> }     array=(a b c)
> }     set -A assoc
>
> That should be "typeset -A assoc".  "set -A" means something entirely
> different.

I jumped to "To create an empty array (including associative arrays)"
in the text below:

       Associative arrays must be declared before assignment, by using:

              typeset -A name

       When name refers to an associative array, the list in an assignment  is
       interpreted as alternating keys and values:

              set -A name key value ...
              name=(key value ...)

       Every  key  must  have a value in this case.  Note that this assigns to
       the entire array, deleting any elements that do not appear in the list.

       To create an empty array (including associative arrays), use one of:

              set -A name
              name=()

This is from Debian Linux's packaging of zsh 4.0.8


-- 
matt



Messages sorted by: Reverse Date, Date, Thread, Author