给定一个列表,我想生成从第一个列表中选择的第二个元素列表.
例如:
let l1 = [1..4]
let n = [0; 2]
l1.[n]
Run Code Online (Sandbox Code Playgroud)
应该返回,1并且3,第一和第三个元素l1.不幸的是,它返回一个错误:
error FS0001: This expression was expected to have type
int but here has type int list
Run Code Online (Sandbox Code Playgroud)
现在,我想知道,确实存在一种方法来传递n表示列表的参数,或者更好的是表达式?
F#不为这种索引提供语法支持.您可以要求连续切片数组,如下所示,但它不包括您的确切方案.
let a = [|1 .. 4|]
let b = a.[0..2]
// returns [|1; 2; 3|]
Run Code Online (Sandbox Code Playgroud)
您可以轻松地为此编写函数:
let slice<'a> (indices: int list) (arr: 'a array) =
[| for idx in indices do yield arr.[idx] |]
slice [0; 2] a
// returns [| 1; 3 |]
Run Code Online (Sandbox Code Playgroud)
我正在离开正确处理越界访问作为练习;)