筛选字符串列表以获取具有一定长度的字符串列表

我有以下函数,该函数接受两个列表,并将每个元素与每个元素匹配,然后返回字符串列表的列表。

matchChars:: [t] -> [t] -> [[t]]
matchChars x y = [[a,b] | a<-x,b <-y]

现在,我想修改该函数,以使列表列表中的字符串不会超过一定长度。 例如:假设matchChars产生输出[["aaa","bbbb"],["c","dd"]]。我想过滤掉所有两个字符串长度等于或大于7的子列表。因此,在此示例中,["aaa","bbbb"]将被过滤掉。

我已经尝试过:

matchChars:: [t] -> [t] -> [[t]]
matchChars x y = takeWhile ((<= 7) . length) [[a,b <-y]

但是,这在迭代子列表的长度而不是字符串的长度时不起作用。有人知道如何解决我的问题吗?

mss0800 回答:筛选字符串列表以获取具有一定长度的字符串列表

就您而言,我认为filtertakeWhile更合适,就像Robin一样。 像这样:

 λ> 
 λ> myFilter = filter (\[ls1,ls2] -> (7 > (length ls1 + length ls2)))
 λ> 
 λ> myFilter  [["aaa","bbbb"],["c","dd"]]
 [["c","dd"]]
 λ> 

函数takeWhile仅用于获取满足您的谓词的项目的初始和连续段。

本文链接:https://www.f2er.com/3117380.html

大家都在问