首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈斯克尔。如何计算两个字符串列表之间的差异?

哈斯克尔。如何计算两个字符串列表之间的差异?
EN

Stack Overflow用户
提问于 2017-09-02 16:06:28
回答 1查看 1.8K关注 0票数 0

我有一个问题可以说是这种情况。

有三种不同的书籍:医学书籍,艺术书籍和历史书。每本书都有三个层次:初级、中级、高级。

这些书将放在书架上。

问题是比较两种不同书架的差别。

我把这个问题抽象为两个字符串列表。

例如:

  • 医学书籍-> M
  • 艺术书籍-> A
  • 历史书-> H
  • 初等-> 1
  • 中间-> 2
  • 高级-> 3

现在,书架可以定义为"A1“、"H2”、"M3“。

问题:

有多少本书是一样的?(同一职类,同职等)

有多少本书有相同的类别但错误的级别?(不包括同一本书)

有多少本书有相同的水平,但却有错误的类别?(不包括同一本书)

顺便说一句,同样的书不是放在同一个书架上,这意味着列表中的每一个元素都是唯一的,而不管书的顺序如何。

示例

“A1”、"H2“、"M3”-> (1本相同的书、1本同类别的书、2本同级别的书) -> (1,1,2本) "H3“、"M2”、"A2“-> (0本相同的书、2本同类别的书、1本同级别的书) -> (0,2,1) "A1","H1","M1”-> (0本相同的书,3本相同的书,0本同水平的书) -> (0,3,0)

当我数同一类别的书有不同的级别或同一级别的书有不同的类别时,有时我得到超过3.

EN

回答 1

Stack Overflow用户

发布于 2017-09-02 16:55:26

您想要的函数在 module中,所以请导入它。您还需要来自onData.Function函数。

与其将书籍表示为像"H1“这样的双元素列表,不如将它们做成对:('H', 1)。它使生活变得容易多了,你不必担心无效的头衔。

你问题的最后一点是,你的书架上从来没有两本书。这意味着每个书架都是一套书。Data.List模块包括一些集函数。例如,两个列表中相同的书籍是由intersect提供的,而书架上的书,而不是另一个书架上的书是由(\\)提供的。您还可以使用这些函数的By变体,例如intersectBy。每个函数都需要一个函数来代替(==)。如果像我前面所建议的那样,用一对书来表示一本书,那么您可以像下面这样构造这些函数:

代码语言:javascript
复制
zs = intersectBy ((==) `on` fst) xs ys
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46015693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档