programing

링크란 무엇입니까?PowerShell의 첫 번째 동등 제품은 무엇입니까?

abcjava 2023. 8. 9. 20:26
반응형

링크란 무엇입니까?PowerShell의 첫 번째 동등 제품은 무엇입니까?

아래의 스니펫은 파일 목록에서 FTP의 디렉터리를 탐지합니다.

C#와 같이 아래와 같습니다.

var files = new List<string>(){"App_Data", "bin", "Content"};
var line = "drwxr-xr-x 1 ftp ftp              0 Mar 18 22:41 App_Data"
var dir = files.First(x => line.EndsWith(x));

PowerShell의 마지막 줄을 변환하려면 어떻게 해야 합니까?

이런 거...

$files = @("App_Data", "bin", "Content")
$line = "drwxr-xr-x 1 ftp ftp              0 Mar 18 22:41 App_Data"
$dir = $files | Where { $line.EndsWith($_) } | Select -First 1

마지막 줄의 이러한 버전은 모두 동일합니다.

$dir = @($files | Where { $line.EndsWith($_) })[0]

$dir = $files | Where { $line.EndsWith($_) } | Select -index 0

$dir = $files | Where { $line.EndsWith($_) } | Select -First 1

위의 동작이 Linq와 정확히 동일하지 않다는 점이 지적되었습니다.첫 번째 이유는 Linq 때문입니다.첫 번째는 다음 두 가지 경우에 예외를 던집니다.

  • 소스 또는 술어가 null인 경우 ArgumentNullException을 슬로우합니다.
  • 잘못된 작업을 던집니다.원본 시퀀스가 비어 있거나 조건을 충족하는 요소가 없는 경우 예외입니다.

정확하게 그런 행동을 하고 싶다면 추가 경비 코드가 필요합니다.

Robert Groves가 말했듯이, "Select-Object-First Occurence"는 트릭을 수행하며, "Last Occurence"도 사용할 수 있습니다.

그건 그렇고, 다른 정적들처럼.파워셸에서 linq를 사용할 수 있는 네트 방법.

[Linq.Enumerable]::First($list)

[Linq.Enumerable]::Distinct($list)

[Linq.Enumerable]::Where($list, [Func[int,bool]]{ param($item) $item -gt 1 })

Powershell 어레이 » 위치 Function을 사용하여 다음과 같이 전달하는 기본 방법이 있습니다.

(1..9).Where({ $_ -gt 3}, "First") # 4

열거형에서 직접 모드를 사용할 수도 있습니다.

$mode = [System.Management.Automation.WhereOperatorSelectionMode]::First
(1..9).Where({ $_ -gt 3}, $mode) # 4

열거형의 값 사용

이름. 묘사
Default 0 모든 항목 반환
First 1 첫 번째 항목 반환
Last 2 마지막 항목 반환
SkipUntil 3 조건이 참이 될 때까지 항목 건너뛰기
Until 4 조건이 참이 될 때까지 모든 항목 반환
Split 5 두 요소의 배열을 반환합니다.

참고 항목:PowerShell V4에서 각 운영자의 위치 및 대상 체크아웃

Doug Finke는 C#을 Powershell http://dougfinke.com/video/CSharpToPowerShell.html 로 변환하는 멋진 비디오(단 7분)를 제작했습니다.

쉼표 구분이 암시적으로 배열로 처리되지만 로버츠 예제는 실제로 매우 좋습니다.

이를 수행하는 가장 빠른 방법은 모든 것을 단일 파이프라인에 넣는 것입니다.

$dir = "App_Data", "bin", "Content" | % { if("drwxr-xr-x 1 ftp ftp              0 Mar 18 22:41 App_Data".EndsWith($_)) { $_ } } | select -first 1

이것은 매우 간단한 구현입니다.First:

function First($collection)
{
    foreach ($item in $collection)
    {
        return $item
    }
    return $null
}

돌아오는 대신에$null당신은 던질 수 있습니다.InvalidOperationException예외.

언급URL : https://stackoverflow.com/questions/5360145/what-is-the-linq-first-equivalent-in-powershell

반응형