首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表转换为Mercury中的元组列表

将列表转换为Mercury中的元组列表
EN

Stack Overflow用户
提问于 2010-12-17 10:41:32
回答 1查看 240关注 0票数 2

我想把一个列表转换成一个从小到高排序的元组列表。例如:

代码语言:javascript
复制
string.to_char_list("this is a test")  becomes

[{'a', 1}, {'e', 1}, {'h', 1}, {'i', 2}, {' ', 3}, {'s', 3}, {'t', 3}]

OR 

[3,2,1,2,1,1,2]  becomes

[{3, 1}, {1, 3}, {2, 3}]

您可以看到,所有元组列表都是从小到高的频率排序。

我在问是否有人可以帮助我解决它,或者是一个指向教程的指针,在那里我可以找到更多的技巧来解决它。

感谢您的回复。

EN

回答 1

Stack Overflow用户

发布于 2011-02-07 00:58:27

例如,标准库有bag数据类型,它很好地准备了所有工具。基本上,您只需将列表转换为包,然后将包转换回包含频率的列表。然后使用sort for lists让它按照你想要的方式进行排序。或者,您可以手动执行相同的操作,并使用作为累加器的映射折叠列表,在累加器中存储遇到的元素及其出现计数。

袋子的一个例子:

代码语言:javascript
复制
:- module freq.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.

:- implementation.
:- import_module string.
:- import_module list.
:- import_module assoc_list.
:- import_module bag.

main(!IO) :- 
  List = string.to_char_list("this is a test"),
  bag.from_list(List, Bag),
  bag.to_assoc_list(Bag, ElemSortedAssocList),
  list.sort(assoc_list.reverse_members(ElemSortedAssocList), CountSortedAssocList),
  assoc_list.reverse_members(CountSortedAssocList, Result),
  io.write(Result, !IO),
  io.nl(!IO).
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4467233

复制
相关文章

相似问题

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