如何解决提取Haskell中列表之间的列表元素
| 我有以下清单:[[a,b,c],[d,e,f],[g,h,i]]
并希望获得以下内容(例如,如果我提取列表中列表的第0个元素):
[[a],[d],[g]]
我已经能够对一个元素(例如([[a,i]])!!0!!0 = a
)执行此操作,但是我似乎无法使该函数适用于该列中的所有元素。
解决方法
您已经知道可以使用
!! i
获得列表的第i
个元素。那么如何获得列表列表中每个列表的第4个元素?对列表中的每个列表应用(!! i)
。那你该怎么做?通过使用map
可以对列表中的每个元素应用任何功能。
因此,通过将map
与(!! i)
一起使用,我们得到一个包含每行第i
列的列表,在您的示例中为[a,d,g]
。由此,您可以轻松轻松地达到预期的输出。
尽管如果您想按列访问很多矩阵,最好先转置矩阵然后再使用转置矩阵。
,要提取列表的第一个元素,可以使用head
函数,因此,如果要提取列表中包含的列表的第一个元素,则应编写
extract_first :: [[a]] -> [a]
extract_first = map head
,您可以编写第二个函数来获取列表的第二个,并使用很酷的地图snd \'!
snd\' :: [a] -> a
snd\' [] = error \"can\'t call the second on an empty list!\"
snd\' [x] = error \"can\'t call the second when the list has only one value!\"
snd\' (_:x:_) = x
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。