首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取无效驱动器号的列表

获取无效驱动器号的列表
EN

Stack Overflow用户
提问于 2012-04-12 05:52:06
回答 2查看 138关注 0票数 1
代码语言:javascript
运行
复制
let private GetDrives = seq{
let all=System.IO.DriveInfo.GetDrives()
for d in all do
    //if(d.IsReady && d.DriveType=System.IO.DriveType.Fixed) then
        yield d
}

let valid={'A'..'Z'}
let rec SearchRegistryForInvalidDrive (start:RegistryKey) = seq{
    let validDrives=GetDrives |> Seq.map (fun x -> x.Name.Substring(0,1))
    let invalidDrives= Seq.toList validDrives |> List.filter(fun x-> not (List.exists2 x b)) //(List.exists is the wrong method I think, but it doesn't compile

我遵循了F#: Filter items found in one list from another list,但无法将其应用于我的问题,因为我看到的两种解决方案似乎都不能编译。List.Contains不存在(缺少引用?)而且ListA - ListB也不能编译。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-12 05:56:32

代码语言:javascript
运行
复制
open System.IO
let driveLetters = set [ for d in DriveInfo.GetDrives() -> d.Name.[0] ]
let unused = set ['A'..'Z'] - driveLetters
票数 7
EN

Stack Overflow用户

发布于 2012-04-12 06:05:45

您的第一个错误是在charstring之间混用,最好从char开始

代码语言:javascript
运行
复制
let all = {'A'..'Z'}
let validDrives = GetDrives |> Seq.map (fun x -> x.Name.[0])

现在,无效的驱动器号是那些在all中但不在validDrives中的盘符

代码语言:javascript
运行
复制
let invalidDrives = 
      all |> Seq.filter (fun c -> validDrives |> List.forall ((<>) c))

由于要多次遍历validDrives以检查成员身份,因此在此示例中将其转换为set会更好:

代码语言:javascript
运行
复制
let all = {'A'..'Z'}
let validDrives = GetDrives |> Seq.map (fun x -> x.Name.[0]) |> Set.ofSeq
let invalidDrives = all |> Seq.filter (not << validDrives.Contains)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10114516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档