如何从 objects 数组中获取单个 属性 值?
How to get a single property value from an array of objects?
我有一个 object 数组:
$list = @( `
@{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'}, `
@{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'}, `
@{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'} `
)
我想使用 guid 来查找 return 标题。我想要的只是价值,我不想 return 一个 object。例如,如果查找 guid '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188',我只想 return 一个字符串值 'Second',而不是带有 [=43= 的 object ] 的值为 'Second'。
我该怎么做?
我试过以下方法:
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'
其中 return 是一个散列 table
和
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | select {$_.title}
其中 return 是一个具有 {$_.title}
NoteProperty 的 PSObject。
以下两种尝试有效:
($list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' `
| select {$_.title}).{$_.title}
($list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' `
| select @{Name="result";Expression={$_.title}}).result
然而,他们都很丑。有没有更好的方法 return 只计算值?
这是访问值的另一种方式。
PS:> $list = @( `
>> @{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'}, `
>> @{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'}, `
>> @{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'} `
>> )
>>
PS:> $list|%{if($_.ContainsValue('0EDC361C-862E-41FC-8A60-870CADC17EC5')){$_.title}}
Third
PS:>
如果你可以稍微改变你的数据结构,那么对哈希进行哈希可能是最有效和最优雅的解决方案:
$hashtable = @{}
$hashtable.Add('0118B390-3AF5-406E-920D-FE140392584D', @{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'})
$hashtable.Add('2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188', @{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'})
$hashtable.Add('0EDC361C-862E-41FC-8A60-870CADC17EC5', @{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'})
然后您可以通过以下方式从 GUID 中检索您的标题:
$hashtable['2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'].title
另一种选择
($list |?{ $_.guid -eq '0EDC361C-862E-41FC-8A60-870CADC17EC5'}).title
如果您只需要单个 属性 的值,最简单的方法是将 $list
定义为自定义对象数组,然后展开 属性:
$list = @(
[pscustomobject]@{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'},
[pscustomobject]@{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'},
[pscustomobject]@{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'}
)
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | select -Expand title
但这需要 PowerShell v3 或更新版本。如果您坚持使用 PowerShell v2 或更早版本,或者由于某种原因无法将哈希表转换为自定义对象,您可以在循环中回显 title
属性(类似于 建议):
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | % { $_.title }
我有一个 object 数组:
$list = @( `
@{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'}, `
@{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'}, `
@{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'} `
)
我想使用 guid 来查找 return 标题。我想要的只是价值,我不想 return 一个 object。例如,如果查找 guid '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188',我只想 return 一个字符串值 'Second',而不是带有 [=43= 的 object ] 的值为 'Second'。
我该怎么做?
我试过以下方法:
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'
其中 return 是一个散列 table
和
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | select {$_.title}
其中 return 是一个具有 {$_.title}
NoteProperty 的 PSObject。
以下两种尝试有效:
($list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' `
| select {$_.title}).{$_.title}
($list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' `
| select @{Name="result";Expression={$_.title}}).result
然而,他们都很丑。有没有更好的方法 return 只计算值?
这是访问值的另一种方式。
PS:> $list = @( `
>> @{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'}, `
>> @{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'}, `
>> @{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'} `
>> )
>>
PS:> $list|%{if($_.ContainsValue('0EDC361C-862E-41FC-8A60-870CADC17EC5')){$_.title}}
Third
PS:>
如果你可以稍微改变你的数据结构,那么对哈希进行哈希可能是最有效和最优雅的解决方案:
$hashtable = @{}
$hashtable.Add('0118B390-3AF5-406E-920D-FE140392584D', @{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'})
$hashtable.Add('2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188', @{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'})
$hashtable.Add('0EDC361C-862E-41FC-8A60-870CADC17EC5', @{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'})
然后您可以通过以下方式从 GUID 中检索您的标题:
$hashtable['2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'].title
另一种选择
($list |?{ $_.guid -eq '0EDC361C-862E-41FC-8A60-870CADC17EC5'}).title
如果您只需要单个 属性 的值,最简单的方法是将 $list
定义为自定义对象数组,然后展开 属性:
$list = @(
[pscustomobject]@{title='First';guid='0118B390-3AF5-406E-920D-FE140392584D'},
[pscustomobject]@{title='Second';guid='2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188'},
[pscustomobject]@{title='Third';guid='0EDC361C-862E-41FC-8A60-870CADC17EC5'}
)
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | select -Expand title
但这需要 PowerShell v3 或更新版本。如果您坚持使用 PowerShell v2 或更早版本,或者由于某种原因无法将哈希表转换为自定义对象,您可以在循环中回显 title
属性(类似于
$list | where guid -eq '2C78DA61-B6EF-4E4E-8FF8-4A95D75C8188' | % { $_.title }