[英]Haskell: converting a list of tuples into a list of lists
我有一個元組列表:
[("book", 1,0), ("book", 2,0), ("title", 2,1)]
我想將int也轉換為String的列表的列表:
[["book, "1","0"], ["book , "2", "0"]...]
我試過了:
map(\(a, b, c) -> [a, b, c])myList
但我收到以下錯誤消息:
* No instance for (Num [Char]) arising from a use of `myList'
您無法執行該轉換。 與元組不同,列表是同質的:它們僅包含相同類型的值。
沒有["book",1,0]
, ["book",1,0]
這樣的列表,因為它同時包含字符串和數字。 例如,該列表不能具有[String]
類型,也不能具有[Int]
類型。
除了@chi的答案外,您還可以嘗試將Int
和String
求和,稱為Either Int String
。
concatMap
(\(s, x, y) -> [Right s, Left x, Left y])
[("book", 1, 0), ("book", 2, 0), ("title", 2, 1)]
= [Right "book", Left 1, Left 0, Right "book",
Left 2, Left 0, Right "title", Left 2, Left 1]
但是,如果數字與字符串相關聯,則元組列表是高級結構。
如果您確定您的元組的類型(String, Int, Int)
則只需編寫
tupleToList :: (String, Int, Int) -> [String]
tupleToList (a,b,c) = [a, show b, show c]
並將其映射到您擁有的[(String, Int, Int)]
。
更普遍,
tupleToList :: (Show a, Show b) => (String, a, b) -> [String]
tupleToList (a,b,c) = [a, show b, show c]
這樣您就可以在輸入元組的第二和第三位置插入任何可顯示的內容,但不能太籠統 :例如,您不能
不固定的元組長度,例如(a,b,c)
與(a,b,c,d)
切換show
對象,例如(String, a, b)
混合(b, String, a)
-我的意思是,首先如何將不同的元組存儲在列表中?
如果確實需要,則不建議使用稱為異類列表的東西,您也無法真正從中獲得很多收益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.