当前位置: 首页 > 知识库问答 >
问题:

如何创建一个模式来匹配元组列表中的所有元素?[副本]

夏季萌
2023-03-14

我试图创建一个以元组列表为参数的函数。该函数通过每个元组中的第二个元素对元组列表进行排序。我的代码是创建一个模式,该模式只与一个元素匹配一个元组列表。为了测试,我使用一个包含两个元素的元组列表调用函数,并且出现了“函数中的非穷举模式”错误。

如何创建一个模式来匹配元组列表中的所有元素。

下面是创建函数的代码。

sortWords::[(字符串,Int)]-

sortWords[(str,num)]=sortBy(\x-y-

下面是我如何调用函数的。

main=do putStrLn$show$sortWords[(“朋友”,1),(“她”,2)]

我在http://repl.it.上运行我的程序


共有1个答案

仉宸
2023-03-14

这里不需要任何模式匹配。只需为整个列表参数指定一个名称。

sortWords pairs = sortBy (\x y -> compare (snd x) (snd y)) pairs

这可以进一步降低η:

sortWords = sortBy (\x y -> compare (snd x) (snd y))

不过,模式匹配在内部lambda中是有意义的:

sortWords = sortBy (\(_,x) (_,y) -> compare x y)

有标准的帮助函数,使它更简单:

import Data.Ord (comparing)

sortWords = sortBy $ comparing snd
 类似资料:
  • 问题内容: 只会给出列表中第一个出现的项目。有没有整齐的技巧可以返回列表中的所有索引? 问题答案: 你可以使用列表理解:

  • 我有一个数字列表L。还有另一个数字列表M。我需要返回一个在L和M中找到的数字列表L。 编辑:从数学上讲,我正在寻找多集交点。 例子: L=3,,4,,5,,,6 M=,7,,,,1 L'=9,1,2,1 我为此编写了以下代码: 虽然它达到了目的,但我想知道是否有一种惯用的Perl6方法可以做到这一点? 一些背景:我一直在尝试一起学习Perl6和Python,并用这两种语言解决相同的难题。Pytho

  • 我想在java中创建一个方法,该方法接收两个字符串列表:

  • 我有这样的元素: 我想检索没有已定义。在这种情况下,元素。 对于这个问题,我得到了相反的结果: 我尝试了和的组合,但是我没有找到合适的解决方案。

  • 开始时,所有标志均为0。我使用while循环来检查是否至少有一个元素的标志为0: 如果返回,那么我将继续处理我的列表: 实际上,我想在迭代my_list时移除元素,但不允许在迭代时移除项。 由于我无法在迭代时删除元素,所以我发明了这些标志。但是包含许多项,循环在每个循环中读取所有项,这会消耗大量时间!你有什么建议吗?

  • 问题内容: 我有一个像下面这样的列表,其中第一个元素是id,另一个是字符串: 我只想从此元组列表创建ID列表,如下所示: 我将使用此列表,因此它必须是整数值的列表。 问题答案: