繁体   English   中英

用[Int]和[[String]] Haskell进行索引

[英]Indexing with [Int] and [[String]] Haskell

我在索引[Int][[String]] ,现在我只想保留与索引相对应的[String]

[0,1,4][[a,a,a],[b,b,b],[c,c,c],[d,d,d],[e,e,e],[f,f,f]]

会给出[[a,a,a],[b,b,b],[e,e,e]]

所以[Int] -> [[String]] -> [[String]]

我该怎么办?

我已经尝试过map (!!) (xy)

其中x是[[String]],y是[Int]

也许您正在寻找这样的东西:

foo :: [Int] -> [[String]] -> [[String]]
foo indices strings = map (strings !!) indices

类型也可以泛化为

foo :: [Int] -> [a] -> [a]

因为我们不需要列表。

这不是非常有效。 例如,如果我们假设索引在增加,则可以大大改善。

我猜想使用列表推导是这项工作的一种表达方式。

getStrings :: [Int] -> [[String]] ->  [[String]]
getStrings is css = [cs | (ix,cs) <- zip [0..] css, ix `elem` is]

*Main> gs [0,1,4] [["a","a","a"],["b","b","b"],["c","c","c"],["d","d","d"],["e","e","e"],["f","f","f"]]
[["a","a","a"],["b","b","b"],["e","e","e"]]

因此,按照@Centril的评论,我必须同意这里是同一件事的单子形式;

gs :: [Int] -> [[String]] ->  [[String]]
gs is css = zip [0..] css >>= \(ix,cs) -> guard (ix `elem` is) >> return cs

*Main> gs [0,1,4] [["a","a","a"],["b","b","b"],["c","c","c"],["d","d","d"],["e","e","e"],["f","f","f"]]
[["a","a","a"],["b","b","b"],["e","e","e"]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM