programing

특정 값을 가진 해시 테이블 키를 얻는 방법은?

css3 2023. 10. 22. 20:20

특정 값을 가진 해시 테이블 키를 얻는 방법은?

값에 따라 키가 사용되고 있는 해시 테이블을 가지고 있습니다.

전남편은.

    $ComponentTobeBuild=@{"ComponentNameX"="True";
                          "ComponentNameXyz"="False";
                          "SomeComponent"="False"}

값이 True인 키를 받고 싶습니다. (키를 다른 스크립트에 파라미터로 전달하겠습니다.)

그렇게 하려고 했는데, 키가 안 나와 있어서 어디가 그리운 것 같아요.

$($ComponentToBuild.Keys) | Where-Object { $_.Value -eq "True" }

True로 표시된 구성 요소 이름을 가져오는 방법은 무엇입니까?또한 해시 테이블이 이러한 작업에 현명한 선택인지 알고 싶습니다.해시 테이블은 값 처리에 주로 사용될 것으로 생각했기 때문입니다.

$ComponentTobeBuild.GetEnumerator() | ? { $_.Value -eq "True" }

안녕하세요. 원하는 것에 효과가 있을 겁니다.

$ComponentTobeBuild=@{"ComponentNameX"="Test";
                          "ComponentNameXyz"="False";
                          "SomeComponent"="False"}                    

Foreach ($Key in ($ComponentTobeBuild.GetEnumerator() | Where-Object {$_.Value -eq "Test"}))
{$Key.name}

이것이 오래된 것은 알지만, 다른 문제를 찾다가 이것을 보고 왜 당신이 Enumerators를 괴롭히는지 궁금했습니다.문제와 같은 코드를 실제 언어로 정확하게 작성하기만 하면 됩니다.

모든 키를 주세요. 여기서 값은 'True'입니다.

$ComponentTobeBuild.Keys | ? { $ComponentTobeBuild[$_] -eq 'True'  }

일관성을 위해 나는 그것을 요약할 것입니다.@()결과가 하나 또는 하나도 없는 경우에도 배열을 가져옵니다.

질문자가 가졌던 해결책에 관해 말하자면, 문제는$_는 String이고,.Value는 키의 값이 아닙니다.문자열에는 존재하지 않습니다.해시 테이블의 값을 다음과 같이 구해야 합니다.$_비교하기 위해 Key로 표시합니다.

PowerShell에서 해시 테이블을 필터링할 때 발생하는 문제는 Key-Value 쌍을 반복할 수 없다는 것입니다.

소장품이 있다고 가정해 보겠습니다.

$collection = @{ 
    a = 'A'; 
    b = 'B'; 
    c = 'C'; 
    d = 'D'; 
    e = 'E';
    ...
}

사용할 수 있기를 기대할 수 있습니다.

$results = $collection | Where-Object { $_.Key -in ('a', 'b', 'd') }

파워쉘에서는 그럴 수 없습니다.

따라서 다시 열거자를 사용해야 합니다.

$results = $collection.GetEnumerator() | Where-Object { $_.Key -in ('a', 'b', 'd') }
$results

Name                           Value
----                           -----
d                              D
b                              B
a                              A

당신은 또한 사용할 수 있습니다.Dictionary.Keys'Where조건이 참일 때 모든 요소를 반환하는 메서드입니다.이 조건은 람다가 테스트된 키를 주장하는 것일 수 있습니다.$_에 관련된."True"사전의 값입니다.

$ComponentTobeBuild=@{"ComponentNameX"="True";
                      "ComponentNameXyz"="False";
                      "SomeComponent"="False"}
$ComponentTobeBuild.Keys.Where({$ComponentTobeBuild[$_] -eq "True"})
# -> @("ComponentNameX")

가장 간단한(그리고 가장 깔끔한) 방법은 다음과 같습니다.

$ComponentToBuild.where{$_.Keys -match 'True'}

그럼 필요한 부분만 가져와요

$ComponentToBuild.where{$_.Keys -match 'True'} | select Field1,Field2,Field99

기타

언급URL : https://stackoverflow.com/questions/11357654/how-to-get-hash-table-key-which-has-specific-value