我有一个只应包含字母的字符串。要检查我是否编写了以下代码
let isCorrectString(str:string) =
let isInRange x = (x > 64 && x < 91 ) || (x > 96 && x < 123) || x = 32
not (str.Any(fun ch -> not (isInRange (ch :?> int)) ))
Run Code Online (Sandbox Code Playgroud)
我显然在这里使用LINQ的`Any'扩展方法。有没有更好的方法来编写上述代码?
如果您只想验证它是正确的,则可以执行以下操作:
let isCorrectString(str:string) =
let isInRange x = (x > 64 && x < 91 ) || (x > 96 && x < 123) || x = 32
let bad =
str
|> Seq.map (fun c -> isInRange(int c))
|> Seq.exists (fun b -> b = false)
not bad
Run Code Online (Sandbox Code Playgroud)
请注意,这可能是一个更简单的选择:
let isCorrectString(str:string) =
str
|> Seq.forall (fun c -> System.Char.IsLetter(c) || c = ' ')
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意:
let isCorrectString(str:string) =
str
|> Seq.tryFind (fun c -> not(System.Char.IsLetter(c) || c = ' '))
|> Option.isNone
Run Code Online (Sandbox Code Playgroud)