Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
f#使用c#库中的函数在两个数组上迭代_F#_Arrays_Iteration - Fatal编程技术网

f#使用c#库中的函数在两个数组上迭代

f#使用c#库中的函数在两个数组上迭代,f#,arrays,iteration,F#,Arrays,Iteration,我有一个单词列表和一个相关的词性标签列表。我想使用每个索引元组作为.NET函数的输入,同时对这两个元组进行迭代(匹配索引)。这是最好的方法吗(它有效,但我觉得不自然): 在我看来,您的代码相当不错-大部分代码都处理一些加载和初始化,因此您无法简化该部分。除了Array.map2,您还可以将Seq.zip与Seq.map组合使用,zip函数将两个序列组合为一个序列,其中包含具有匹配索引的元素对: let lemmas = Seq.zip words tags |> Se

我有一个单词列表和一个相关的词性标签列表。我想使用每个索引元组作为.NET函数的输入,同时对这两个元组进行迭代(匹配索引)。这是最好的方法吗(它有效,但我觉得不自然):


在我看来,您的代码相当不错-大部分代码都处理一些加载和初始化,因此您无法简化该部分。除了
Array.map2
,您还可以将
Seq.zip
Seq.map
组合使用,
zip
函数将两个序列组合为一个序列,其中包含具有匹配索引的元素对:

let lemmas = Seq.zip words tags 
          |> Seq.map (fun (x, y) -> lemmatizer.lookup (x, y)) 
由于
lookup
函数将得到的元组作为参数,因此可以编写:

// standard syntax using the pipelining operator
let lemmas = Seq.zip words tags |> Seq.map lemmatizer.lookup

// .. an alternative syntax doing exactly the same thing
let lemmas = (words, tags) ||> Seq.zip |> Seq.map lemmatizer.lookup
第二个版本中使用的
| |>
运算符获取包含两个值的元组,并将它们作为两个参数传递给右侧的函数,这意味着
(a,b)|>f
意味着
fab
|>
运算符只取左侧的一个值,因此
(a,b)|>f
将表示
f(a,b)
(如果函数
f
期望的是元组而不是两个空格分隔的参数,这将起作用)

如果需要
引理
作为末尾的数组,则需要将
数组.ofSeq
添加到处理管道的末尾(所有
Seq
函数都使用序列,序列对应于
IEnumerable

另一种选择是使用序列表达式(如果需要的话,可以使用
[|…|]
直接构造数组):


是否使用序列表达式-这只是个人喜好。在这种情况下,第一个选项似乎更简洁,但对于不太熟悉部分函数应用程序(在较短的版本中,使用
Seq.map
)的人来说,序列表达式可能更可读

我添加了一些关于
| |>
的解释-简单地说-它允许您向右侧的函数传递两个参数,而
|>
仅指定一个参数(
Seq.zip
接受两个参数)。
// standard syntax using the pipelining operator
let lemmas = Seq.zip words tags |> Seq.map lemmatizer.lookup

// .. an alternative syntax doing exactly the same thing
let lemmas = (words, tags) ||> Seq.zip |> Seq.map lemmatizer.lookup
let lemmas = [| for wt in Seq.zip words tags do // wt is tuple (string * string)
                  yield lemmatizer.lookup wt |]