Na samym początku zrobiłem węzeł reprezentujący wartość oraz wskazuje na następny i poprzedni węzeł:
function Create-Node
{
param($value, $previous, $next)
return new-object PSObject |
Add-Member -MemberType NoteProperty -Name "Value" -Value $value -PassThru |
Add-Member -MemberType NoteProperty -Name "Next" -Value $next -PassThru |
Add-Member -MemberType NoteProperty -Name "Previous" -Value $previous -PassThru
}
Jeszcze do tego jest potrzebna funkcja do wypełnienia tych węzłów:function Create-CircularList
{
param([array]$arr, [switch]$nonCircular)
$CircularList =@()
for($i=0; $i -lt $arr.Length; $i++)
{
$node = Create-Node -value $arr[$i]
if($i -gt 0)
{
$prevNode = $CircularList[$i-1]
$node.Previous = $prevNode
$prevNode.Next = $node
}
$CircularList += $node
}
if(!$nonCircular)
{
$firstNode = $CircularList[0]
$lastNode = $CircularList[$arr.Lengt-1]
$firstNode.Previous = $lastNode
$lastNode.Next = $firstNode
}
return $CircularList
}
Wywołanie jest bardzo proste:$list= Create-CircularList -arr "A","B","C" $item = $list[0] $item.Next.Next.NextZmienna $item reprezentuje pierwszy element, a jak wywołały 3 razy następny element to również uzyskamy pierwszy element z listy.
Jeżeli będziesz chciał stworzyć połączenia, bez cyklu to wystarczy wywołać funkcję z parametrem nonCircular:
$list= Create-CircularList -arr "A","B","C" -nonCircular $item = $list[0] $item.Next.Next.Next
Brak komentarzy:
Prześlij komentarz