我想把一个列表转换成一个从小到高排序的元组列表。例如:
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}]您可以看到,所有元组列表都是从小到高的频率排序。
我在问是否有人可以帮助我解决它,或者是一个指向教程的指针,在那里我可以找到更多的技巧来解决它。
感谢您的回复。
发布于 2011-02-07 00:58:27
例如,标准库有bag数据类型,它很好地准备了所有工具。基本上,您只需将列表转换为包,然后将包转换回包含频率的列表。然后使用sort for lists让它按照你想要的方式进行排序。或者,您可以手动执行相同的操作,并使用作为累加器的映射折叠列表,在累加器中存储遇到的元素及其出现计数。
袋子的一个例子:
:- 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).https://stackoverflow.com/questions/4467233
复制相似问题