F#模式过滤

时间:2018-03-06 05:36:29

标签: f#

有人可以告诉我如何在列表包含特定号码时过滤掉列表。例如,如果子列表包含2,那么我想要第三个值。

let p = [ [0;2;1]; [7;2;5]; [8;2; 10]; [44; 33; 9]]
//Filtered List: [1;5;10]
let q = p |> List.filter(fun((x,y):int List)  (List.item 2 x) = 1,  (List.item 3 y))

以上是我的代码。我知道它错了,但似乎无法在代码中弄清楚。

2 个答案:

答案 0 :(得分:6)

s952163's回答是正确的,但List.choose会更好。

onError(error){
  console.log(error)
}

onError={ this.onError.bind(this) }

使用上面的解决方案,您只需遍历列表一次。

答案 1 :(得分:5)

我认为你可以按照你描述问题的方式去做:

p 
|> List.filter (List.contains 2) //first filter out lists with 2 in it
|> List.map (fun x -> x.[2]) //get the third element, this is the same as List.item 2 

//val it : int list = [1; 5; 10]