【发布时间】:2019-04-22 00:30:01
【问题描述】:
我有一个(Int,String) 类型的元组列表,我想生成一个[String] 类型的列表,其中每个字符串都是具有相同Int 值的元组的第二个元素的笛卡尔连接排列。例如:
输入:[(1,"abc"),(1,"def"),(2,"ghi"),(2,"kl")]
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf", "gk", "gl", "hk", "hl", "ik", "il"]
我试过这个,但我找不到一种方法来用相同的 Int 值置换元组:
possible_keys :: [(Int,String)] -> [String]
possible_keys subkeys = [ key | keysize <- keysizes, key<-keys]
where keysizes = map (fst) subkeys
keys = sequence (map (snd) subkeys)
有什么提示吗?
【问题讨论】:
-
@duplode 如果只有一个元组,则忽略该元组。如果有超过 2 个具有相同 int 值的元组,例如您的示例,它将给出 ["adx", "ady","adz","aex","aey","ayz","afx","afy" ,"afz","bex","bey"...]
-
没关系——我只看过你的例子,并没有注意到你已经可以使用
sequence进行排列。 -
是的,它循环正常,但我仍然找不到用其他元组而不是具有相同 int 值的元组过滤排列的方法
标签: haskell