在F#中过滤数组

时间:2014-08-16 20:31:00

标签: multidimensional-array filter f#

我是F#的新手。我需要过滤一个字符串数组,我不知道怎么做。 我需要能够搜索某行是否有值,并根据此进行过滤。

我不允许使用任何类型的“For or While”。我一直在寻找像Array.Filter,Sort,Find这样的东西,但我不知道如果你有一个阵列数组,你怎么能用它们。

请帮助,我已经尝试解决这个问题已经10天了

这是一个Array格式的图片,我希望能够过滤并取出包含“f”的行

http://es.tinypic.com/r/2133nzp/8

1 个答案:

答案 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 |]

鉴于你掌握了上述内容,现在解决原始问题应该不难。祝好运!