• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

How to create a hash table from an array

R

RickB

#1
I'm looking for the simplest way to turn an array of custom objects
into a hashtable with some particular property of the custom object
being the key.

So, given some function that emits an array of objects

function myArray {
1..10|
%{$a=$_;""|
select-object name,even,sqr|
%{$_.name = "a$a"
$_.even = [int]($a/2)*2 -eq $a
$_.sqr = $a*$a
$_}}}

What function f will result in

PS 1> $h = f $(myArray) name
PS 2> $h.a3.even
False
 
A

Alex K. Angelopoulos

#2
function ArrayToHash
{
Param($array, $indexproperty)
$hash = @{}
$array | %{$hash[$_.$indexproperty] = $_}
$hash
}

This should turn any enumerable collection into a hash using the named
property as an index. For example, you can collect filesystem objects from
the current location and use their FullName property as the index like this:

ArrayToHash (gci) FullName

or, to collect them into a variable:

$h = ArrayToHash (gci) FullName



"RickB" <rbielaws@xxxxxx> wrote in message
news:9853d408-c430-410b-a32c-d34ec51a51cc@xxxxxx

> I'm looking for the simplest way to turn an array of custom objects
> into a hashtable with some particular property of the custom object
> being the key.
>
> So, given some function that emits an array of objects
>
> function myArray {
> 1..10|
> %{$a=$_;""|
> select-object name,even,sqr|
> %{$_.name = "a$a"
> $_.even = [int]($a/2)*2 -eq $a
> $_.sqr = $a*$a
> $_}}}
>
> What function f will result in
>
> PS 1> $h = f $(myArray) name
> PS 2> $h.a3.even
> False
 
R

RickB

#3
On Aug 8, 3:44 pm, "Alex K. Angelopoulos" <aka(at)mvps.org> wrote:

>  function ArrayToHash
> {
> Param($array, $indexproperty)
> $hash = @{}
> $array | %{$hash[$_.$indexproperty] = $_}
> $hash
>
> }
>
> This should turn any enumerable collection into a hash using the named
> property as an index. For example, you can collect filesystem objects from
> the current location and use their FullName property as the index like this:
>
> ArrayToHash (gci) FullName
>
> or, to collect them into a variable:
>
> $h = ArrayToHash (gci) FullName
>
> "RickB" <rbiel...@xxxxxx> wrote in message
>
> news:9853d408-c430-410b-a32c-d34ec51a51cc@xxxxxx
>
>
>

> > I'm looking for the simplest way to turn an array of custom objects
> > into a hashtable with some particular property of the custom object
> > being the key.
>

> > So, given some function that emits an array of objects
>

> > function myArray {
> > 1..10|
> >  %{$a=$_;""|
> >  select-object name,even,sqr|
> >  %{$_.name = "a$a"
> >    $_.even = [int]($a/2)*2 -eq $a
> >    $_.sqr = $a*$a
> >    $_}}}
>

> > What function f will result in
>

> > PS 1> $h = f $(myArray) name
> > PS 2> $h.a3.even
> > False- Hide quoted text -
>
> - Show quoted text -
Wonderfull
That was so much help
Thanks!