簡體   English   中英

Haskell:將元組列表轉換為列表列表

[英]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的答案外,您還可以嘗試將IntString求和,稱為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM