저는 이것을 실제로 테스트하지는 않았지만이 방법이 효과가있을 것이라고 생각합니다.
$ba = @{}
foreach ($dep in $deps.GetEnumerator()) {
foreach ($after in $dep.Value) {
if ($dep.Key -ne $after) {
if (-not $ba.ContainsKey($dep.Key)) {
$ba[ $dep.Key ] = @{ $after=1 };
}
else {
$ba[ $dep.Key ].$after = 1;
}
}
if (-not $ba.ContainsKey($after)) {
$ba[ $after ] = @{}
}
}
}
나는 파이프 라인에서 그것을 할 좋아하는 것,하지만, 난 여전히 관련된 모든 단점을 배우는 중이에요.
Perl이 수행하는 자동 가상화를 수행하기 위해이 다른 버전을 채웠습니다. 은 위의 방법으로 $ba
을 선언하면 은add-member
이 될 수 없습니다.
$ba = new-object System.Collections.Hashtable;
$ba | add-member ScriptMethod deepset {
$p = $args;
if ($p[0] -is [System.Array]) {
$p = $p[0];
}
$p = [System.Collections.ArrayList]$p;
$last = $p.count - 1;
$val = $p[ $last ];
$p.RemoveAt($last--);
$key = $p[ $last ];
$p.RemoveAt($last--);
$lvl = $this;
foreach ($k in $p) {
if ($lvl.containsKey($k)) {
$old = $lvl.$k;
if ($old -isnot [System.Collections.Hashtable]) {
$lvl.$k = @{ '.' = $old };
}
}
else {
$lvl.$k = @{};
}
$lvl = $lvl.$k;
}
$lvl.$key = $val;
return;
}
# allowing the loop to be a bit shorter.
foreach ($dep in $deps.GetEnumerator()) {
foreach ($after in $dep.Value) {
if ($dep.Key -ne $after) {
$ba.deepset($dep.Key, $after, $true);
}
if (-not $ba.ContainsKey($after)) {
$ba[ $after ] = @{}
}
}
}