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