首页 > 解决方案 > 在多个嵌套哈希表、数组和当前循环中迭代循环的最佳实践是什么?

问题描述

我正在尝试设置一个变量,以简化这些哈希表集中的冗余......我知道我正在做的事情可以完成,但我不确定在哪里设置锚或如何触摸每个循环内的索引。也许我的方法可以通过其他方式更好地解决......

我尝试在索引之外使用 for 循环,但没有按照我尝试的方式工作,因此我只是将错误输出相乘而不是针对变量。我还尝试将附加循环放在嵌套哈希表中,这实际上并没有减少任何数量的指令......

$Split       = ( $Config[2..237] ).Split(',')
$Configuration = [Ordered] @{  

Service =@{ 

        Name=@( 0..235 | % { $i = $_ * 11 ; foreach ( $j in ( $Split[ $i + 0  ] ) ) { if ( $j.Contains("_?????") ) { $j.Replace("_?????", $ServiceEnd ) } else { $j } } } ) }

Default =@{ 

        Home=@{ Full =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 1  ] } )
                Min  =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 2  ] } ) }

        Pro =@{ Full =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 3  ] } )
                Min  =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 4  ] } ) } }

Safe    =@{

        Desk=@{ Full =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 5  ] } )
                Min  =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 6  ] } ) }

        Lap =@{ Full =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 7  ] } )
                Min  =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 8  ] } ) } }

Tweaked =@{

        Desk=@{ Full =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 9  ] } )
                Min  =@( 0..235 | % { $i = $_ * 11 ; $Split[ $i + 10 ] } ) } } }

我不想触摸第一个数组,因为这正是我想要它做的事情。然而,其余的,我有一种感觉,它们都可以写成 [ $i + 1..10 ] 或其他类似的结果。这就是我所追求的目标。

有任何想法吗?

标签: .netpowershell

解决方案


下面是一个使用Group-Object.

$i = 0
$h = $Config[2..237].Split(',') | Group-Object { $i % 11; $script:i++ } -AsHashTable

$Configuration2 = [Ordered]@{  
    Service = @{
        Name = $h[0].Replace("_?????", $ServiceEnd)
    }
    Default = @{ 
        Home = @{ Full = $h[1]; Min = $h[2] }
        Pro  = @{ Full = $h[3]; Min = $h[4] } 
    }
    Safe = @{
        Desk = @{ Full = $h[5]; Min = $h[6] }
        Lap  = @{ Full = $h[7]; Min = $h[8] }
    }
    Tweaked = @{
        Desk = @{ Full = $h[9]; Min = $h[10] }
    } 
}

我认为它可能被简单地视为 CSV。

$data = $Config[2..237] | ConvertFrom-Csv -Header (0..10)
$data.0

推荐阅读