如何在BAThell中将分隔的字符串转换为嵌套的哈希表?

Rus*_*our 3 powershell hashtable

我正在努力寻找一种巧妙的方法将分隔的字符串转换为哈希表.例如给定字符串:

UK_Kent_Margate
Run Code Online (Sandbox Code Playgroud)

我想将其转换为PowerShell HashTable,如下所示:

$result = @{
    UK = @{
        Kent = @{
            Margate = @{}
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

因此,我可以使用"_"字符上的拆分轻松地将字符串分解为数组,但后来我正在努力(读卡住!)进行测试并在结果哈希中声明每个嵌套的哈希值.我想我需要一个没有问题的递归函数,但我无法理解如何在结果哈希中测试正确的级别.

由于我正在编写的应用程序可以有任意数量的'_'因此嵌套我需要想出一个光滑的方法来做这个,我想不出怎么做.

有没有人之前遇到过这样的事情并有任何建议?

mjo*_*nor 6

也许是这样的事情?

$string = 'UK_Kent_Margate'

$result = @{}

$Parts = $string.split('_') 
0..($parts.count -1) |
foreach {
          iex "`$result.$($parts[0..$_] -join '.') = @{}"
        }
Run Code Online (Sandbox Code Playgroud)

为了帮助理解它的工作原理,只需删除iex(invoke-expression),然后输出它要创建的字符串来执行:

$string = 'UK_Kent_Margate'

$result = @{}

$Parts = $string.split('_') 
0..($parts.count -1) |
foreach {
          "`$result.$($parts[0..$_] -join '.') = @{}"
        }

$result.UK = @{}
$result.UK.Kent = @{}
$result.UK.Kent.Margate = @{}
Run Code Online (Sandbox Code Playgroud)