将 csv 导入为具有 2 个键的哈希表

Posted

技术标签:

【中文标题】将 csv 导入为具有 2 个键的哈希表【英文标题】:import csv as a hashtable with 2 keys 【发布时间】:2022-01-15 05:42:50 【问题描述】:

我有一个行和列相等的表

Groups A B C D
A 1 0 0 0
B 0 1 0 0
C 0 0 3 0
D 0 0 1 2

我想将它导入某种类型的变量中,其中 $h[C].C 的输出等于 3。

我厌倦了一个简单的导入命令,但格式让我很难将它输入到哈希表中。哈希表也是最好的格式吗?

【问题讨论】:

不知道为什么表格会按原样显示。它在预览中看起来已格式化。 缺少一个空行,但是是的,它在预览中看起来不错。显然有很多关于 meta 的帖子关于实时预览和涉及表格时呈现的问题不同,这里有一个 - meta.***.com/questions/404376/… - 所以我想他们知道。 是的,hashtable 对此很好,但在 PowerShell 上,您通常会使用此语法 $h['C'].C 引用 $h[C,C] @SantiagoSquarzon 谢谢!现在我如何从 CSV 填充它。某种嵌套的 for 循环? 你可以看看Group-Object,具体是-AsHashtable开关。 【参考方案1】:

您可以使用 Import-Csv 获取 PsCustomObjects 数组并将其转换为嵌套的 Hashtable 之类的。

我使用的是 here-string 示例,但在现实生活中你会这样做 Import-Csv -Path 'X:\WhereEver\theTable.csv'

$data = @"
Groups,A,B,C,D
A,1,0,0,0
B,0,1,0,0
C,0,0,3,0
D,0,0,1,2
"@ | ConvertFrom-Csv

$h = @
$data | ForEach-Object 
    $props = @
    $_.PsObject.Properties | Where-Object  $_.Name -ne 'Groups'  | ForEach-Object $props[$_.Name] = $_.Value 
    $h[$_.Groups] = $props


$h['C'].C  # --> 3

【讨论】:

以上是关于将 csv 导入为具有 2 个键的哈希表的主要内容,如果未能解决你的问题,请参考以下文章

C#中具有多维键的哈希表

使用整数值作为哈希表的键是多么愚蠢?

创建具有不同键的哈希数组的 CSV

在哈希表范围内查找键的最佳算法

C#多维数组,ArrayList,还是哈希表?

哈希表