首页 > 解决方案 > 将表中的新列组合到另一个表的函数

问题描述

我需要一些关于两个表问题的帮助:如何实现 2 个表的简单水平联合?像这样:

table2table :: Table -> Table -> Table

table1 = [["Zoe", "2", "1"], 
         ["Mark", "2", "5"]]

table2 = [["Zbir", "4", "7"], 
         ["Nels", "1", "3"]]

table2table = [["Zoe", "2", "1"], ["Zbir", "4", "7"], 
              ["Mark", "2", "5"], ["Nels", "1", "3"]]

标签: listhaskell

解决方案


对于执行这种组合的一般方法,您可以使用concat . transpose

> concat . transpose $ [table1, table2]
[["Zoe","2","1"],["Zbir","4","7"],["Mark","2","5"],["Nels","1","3"]]

如果您需要,它适用于两个以上的列表:

> concat . transpose $ [table1, table2, table1]
[["Zoe","2","1"],["Zbir","4","7"],["Zoe","2","1"],
 ["Mark","2","5"],["Nels","1","3"],["Mark","2","5"]]   -- manually formatted

transpose“按列”对它们进行分组,concat将列表展平。

混合列表的另一种方法是按以下diagonal方式进行:

> diagonal [table1, table2]
[["Zoe","2","1"],["Zbir","4","7"],["Mark","2","5"],["Nels","1","3"]]

对于两个列表,结果与 相同concat . transpose,但对于更多列表,它们是不同的。

> diagonal [table1, table2, table1]
[["Zoe","2","1"],["Zbir","4","7"],["Mark","2","5"],
 ["Zoe","2","1"],["Nels","1","3"],["Mark","2","5"]]

推荐阅读