我有一個從 JSON 轉換的物件,其中包含有關“受信任的客戶”的資訊。有兩個屬性,其中之一標識客戶端的唯一性:Name AND Thumbprint,因此如果存在包含相同Name或 的元素Thumbprint,則必須省略它們。
另外,我想指出輸出陣列應該包含附加屬性 -Id可以使用 - 生成New-Guid。此處討論了該特殊情況:在此處輸入鏈接描述。
{
"TrustedClients": [
{
"Name": "Client1",
"Thumbprint": "5ed7eb688e404bd787585637975ddb01",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
},
{
"Name": "Client2",
"Thumbprint": "5ed7eb688e404bd787585637975ddb01",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
},
{
"Name": "Client3",
"Thumbprint": "1700a8497495d6053be04b690b98479fd62e6cc9",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
}
]
}
有沒有一種有效的方法來獲取由Name AND Thumbprint屬性指定的唯一物件陣列?所以在這種情況下,輸出陣列應該只包含一個帶有名稱的物件,Client3因為有兩個元素具有相同的Thumbprint值:
{
"TrustedClients": [
{
"Id": "{(New-Guid).ToString()}"
"Name": "Client3",
"Thumbprint": "1700a8497495d6053be04b690b98479fd62e6cc9",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
}
]
}
一開始我正在調整分組,但它與基本思想 - Name AND 的 唯一性相沖突Thumbprint。很明顯,按AND對元素進行分組可能會回傳具有不同值的陣列,但相同,反之亦然。Name ThumbprintNameThumbprint
uj5u.com熱心網友回復:
因此,獨特的Name和Thumbprint我周圍看到保持高效方法是使用一個哈希表或字典,不僅效率,而且因為Keys如果有曾經是一個被洗掉的需求Name或Thumbprint之前補充說。
由于我是一個完全不上課的菜鳥,因此我決定將其用于練習目的:)
using namespace System.Collections.Generic
class UniqueJSON {
[Dictionary[string,object]]$Ref = [Dictionary[string,object]]::new()
[Void]AddList([pscustomobject[]]$Items) {
foreach($item in $Items)
{
$containsKey = $this.Ref.Keys -contains $Item.ThumbPrint
$containsVal = $this.Ref.Values.Keys -contains $Item.Name
if($containsKey -or $containsVal)
{
$this.Ref.Remove($Item.ThumbPrint)
continue
}
$item.PSObject.Properties.Add(
[psnoteproperty]::new(
'ID', [guid]::NewGuid().Guid
)
)
$this.Ref[$Item.ThumbPrint] = @{
$Item.Name = $Item
}
}
}
[object[]]Get() {
return $This.Ref.Values.Values
}
}
# Here you can import your JSON
$json = ..... | ConvertFrom-Json
# Now store the TrustedClients property in a variable
$trusted = $json.TrustedClients
# Create a new instance of the class
$instance = [UniqueJSON]::new()
# Add $trusted
$instance.AddList($trusted)
# Get the unique results
$instance.Get()
$instance.Get()回傳:
Name Thumbprint CallbackThumbprint ID
---- ---------- ------------------ --
Client3 1700a8497495d6053be04b690b98479fd62e6cc9 b7f610106fa24afe9460ab8e4f2db1fc 85af5623-365c-4f8a-9863-be38860406da
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392512.html
