Что такое эквивалент Linq.First в PowerShell? - PullRequest
35 голосов
/ 19 марта 2011

Фрагмент ниже определяет из списка файлов, какой из них является каталогом по 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?

Ответы [ 4 ]

55 голосов
/ 19 марта 2011

Как то так ...

$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
5 голосов
/ 16 ноября 2016

Как сказал Роберт Гроувз, «Select-Object -First Occurence» делают трюки, вы также можете использовать -Last Occurence.

, кстати, как любой другой статический метод .Net, вы можете использовать linq в powershell.

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

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

[Linq.Enumerable]::Where($list, [Func[int,bool]]{ param($item) $item -gt 1 })
1 голос
/ 19 марта 2011

Даг Финке (Doug Finke) выпустил отличное видео (всего 7 минут) о преобразовании C # в Powershell http://dougfinke.com/video/CSharpToPowerShell.html

Пример Робертса действительно очень хорош, хотя разделение запятыми будет неявно рассматриваться как массив

самый короткий способ сделать это - поместить все это в один конвейер:

$dir = "App_Data", "bin", "Content" | % { if("drwxr-xr-x 1 ftp ftp              0 Mar 18 22:41 App_Data".EndsWith($_)) { $_ } } | select -first 1
0 голосов
/ 23 сентября 2014

Это действительно простая реализация для First:

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

Вместо возврата $null вы можете выдать исключение InvalidOperationException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...