下面的代码段从文件列表中检测到哪些文件是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中转换最后一行?
答案 0 :(得分:54)
像这样......
$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
答案 1 :(得分:5)
[Linq.Enumerable]::First($list)
[Linq.Enumerable]::Distinct($list)
[Linq.Enumerable]::Where($list, [Func[int,bool]]{ param($item) $item -gt 1 })
答案 2 :(得分:1)
Doug Finke制作了一个关于将C#转换为Powershell的精彩视频(仅7分钟) 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
答案 3 :(得分:-2)
这是First
的一个非常简单的实现:
function First($collection)
{
foreach ($item in $collection)
{
return $item
}
return $null
}
您可以抛出$null
例外,而不是返回InvalidOperationException
。