Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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# 列表中的重复项_F# - Fatal编程技术网

F# 列表中的重复项

F# 列表中的重复项,f#,F#,如果我想复制列表中的元素,我将如何着手并执行它? 我在想一些大致如下的事情: let List = [(1,2);(3,4)] let v = List.map(fun (x,y) -> List.replicate 2 (x,y)) List 我希望结果是[(1,2);(1,2);(3,4);(3,4)]。任何建议都将不胜感激。如果可能的话,我只想使用更高的顺序。为了可读性,我会使用列表理解: let items = [ (1, 2); (3, 4) ] let duplicated

如果我想复制列表中的元素,我将如何着手并执行它? 我在想一些大致如下的事情:

let List = [(1,2);(3,4)]
let v = List.map(fun (x,y) -> List.replicate 2 (x,y)) List

我希望结果是[(1,2);(1,2);(3,4);(3,4)]。任何建议都将不胜感激。如果可能的话,我只想使用更高的顺序。为了可读性,我会使用列表理解:

let items = [ (1, 2); (3, 4) ]

let duplicated = [
    for item in items do
    yield item
    yield item
]

为了便于阅读,我会使用列表理解:

let items = [ (1, 2); (3, 4) ]

let duplicated = [
    for item in items do
    yield item
    yield item
]

您可以使用
List.collect
,这是F#对
flatmap
的实现(如果您来自功能背景),
SelectMany()
(如果您来自C#),或者
smooshMap
(如果您来自未来可能的JavaScript版本)


您可以使用
List.collect
,这是F#对
flatmap
的实现(如果您来自功能背景),
SelectMany()
(如果您来自C#),或者
smooshMap
(如果您来自未来可能的JavaScript版本)


您有一些很好的解决方案,但我想我会指出您原始代码中的一些错误,特别是因为您非常接近

  • 尽量不要将模块名称分配给变量,因为这可能会引起混淆:例如,将变量命名为
    list
    not
    list
    ,或
    xs

  • 由于F#中的函数是curried函数,因此通常会在函数及其参数之间添加空格(与.NET相关的非curried API调用除外)。因此,在
    List.map
    (fun x->…)
    之间添加一个空格

  • 如果不需要解构元组,可以将其命名为一个参数,
    x

  • 最后,由于
    List.map
    将生成列表列表,因此可以使用
    List.collect
    List.concat

  • 因此:

    或者如果你想变得更花哨

    xs |> (List.replicate 2 >> List.concat)
    

    您有一些很好的解决方案,但我想我会指出您原始代码中的一些错误,特别是因为您非常接近

  • 尽量不要将模块名称分配给变量,因为这可能会引起混淆:例如,将变量命名为
    list
    not
    list
    ,或
    xs

  • 由于F#中的函数是curried函数,因此通常会在函数及其参数之间添加空格(与.NET相关的非curried API调用除外)。因此,在
    List.map
    (fun x->…)
    之间添加一个空格

  • 如果不需要解构元组,可以将其命名为一个参数,
    x

  • 最后,由于
    List.map
    将生成列表列表,因此可以使用
    List.collect
    List.concat

  • 因此:

    或者如果你想变得更花哨

    xs |> (List.replicate 2 >> List.concat)
    

    查看示例代码,列表项是元组这一事实实际上与您的问题无关。您只需要复制列表项,使
    [A;B]
    变成
    [A;A;B;B]
    。在这种情况下,
    A
    (1,2)
    B
    (3,4)
    ,但它们可能是任何东西,你的问题仍然会有相同的答案。@rmunn是的,我也这么认为。标题也相应地进行了调整。看看您的示例代码,列表项是元组这一事实实际上与您的问题无关。您只需要复制列表项,使
    [A;B]
    变成
    [A;A;B;B]
    。在这种情况下,
    A
    (1,2)
    B
    (3,4)
    ,但它们可能是任何东西,你的问题仍然会有相同的答案。@rmunn是的,我也这么认为。标题相应调整。最后一个版本不起作用;它将复制整个列表两次,而不是每个元素上一个版本不起作用;它将复制整个列表两次,而不是每个元素
    xs |> (List.replicate 2 >> List.concat)