haskell中的Double for循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了haskell中的Double for循环相关的知识,希望对你有一定的参考价值。
我正在尝试使用元组的第二个数字创建新列表,如果第一个数字在第一个列表中,则在此示例helplist[0,2] [(0,"a"),(3,"x"),(5,"y"),(1,"b"),(2,"c)] = ["a","c"]
我尝试了很多组合,但没有成功,这里是我的代码:
helplist :: [Int] -> [(Int,Char)] -> [Char]
helplist (x:xs) ((i,g):gs) | (x == i) = g : helplist xs gs
helplist _ _ = []
在Java中,我做了2倍for循环,但在haskell中,我只知道递归。
答案
您可以在此处使用列表理解:
helplist :: Eq a => [a] -> [(a, b)] -> [b]
helplist xs gs = [ g | x <- xs, (i, g) <- gs, x == i ]
或者您可以尝试根据另一个列表的值来过滤列表,例如:
helplist :: (Foldable f, Eq a) => f a -> [(a, b)] -> [b] helplist xs gs = concatMap (x -> map snd (filter ((i, _) -> x == i) gs)) xs
以上是关于haskell中的Double for循环的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中创建一副牌而不使用 While 和 Double For 循环
高效的 double for 循环,其中第二个循环的范围取决于第一个循环的值