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
notlist
,或xs
List.map
和(fun x->…)
之间添加一个空格x
List.map
将生成列表列表,因此可以使用List.collect
或List.concat
xs |> (List.replicate 2 >> List.concat)
您有一些很好的解决方案,但我想我会指出您原始代码中的一些错误,特别是因为您非常接近
list
notlist
,或xs
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)