我是F#的新手。我需要过滤一个字符串数组,我不知道怎么做。 我需要能够搜索某行是否有值,并根据此进行过滤。
我不允许使用任何类型的“For or While”。我一直在寻找像Array.Filter,Sort,Find这样的东西,但我不知道如果你有一个阵列数组,你怎么能用它们。
请帮助,我已经尝试解决这个问题已经10天了
这是一个Array格式的图片,我希望能够过滤并取出包含“f”的行
答案 0 :(得分:3)
由于上面的评论链变得越来越痛苦,我会尝试给你一个提示。
您应该首先了解F# Array.filter<'T> function的定义。签名
Array.filter:('T - &gt; bool) - &gt; 'T [] - &gt; 'T []
简单地读取,但准确的语言如下:“如果您在签名中有一系列通用类型'T ('T [] 元素,在'T 类型上定义的另一个函数 p ,如果元素'T ,则返回 true 有所需的属性,否则错误(签名中的('T - &gt; bool),然后将 Array.filter 应用于某个数组<类型'T [] 的strong> aIn 将产生相同类型'T [] 的其他数组 aOut 仅包含那些 a 的元素 p ,应用于每个元素,产生 true “。为了真正掌握这一点,它可能有助于通过F#解释器播放一个例子:让我们的'T 是一个整数数组,所以'T [] 是数组下面的整数数组和 aIn 是包含三个不同整数数组的此类数组的示例:
let aIn = [| [|1|]; [|-1;2;1|]; [|0;5|]; |]
然后,让我们的谓词 p 表示“作为参数给出的整数数组不包含负数”,这可能在F#中以“罗嗦的方式”表示如
let p (arg: int[]) = arg |> Array.exists (fun x -> x < 0) |> not
确保您完全了解 p , arg , x 和(有趣的x - &gt; x&lt; 0 )高于平均值,特别是 x 有一个普通的单个整数。
最后,让我们按照原来的 Array.filter 签名将这些碎片组合在一起:
let aOut = Array.filter p aIn
在F#解释器中输入上面三行代码,你最终应该
val aOut : int [] [] = [|[|1|]; [|0; 5|]|]
是 aIn 的副本,但缺少包含负元素的中间数组元素 [| -1; 2; 1 |] 。
鉴于你掌握了上述内容,现在解决原始问题应该不难。祝好运!