gpt4 book ai didi

list - swi-prolog : how to sort list of lists by NTH element of sublist, 允许重复

转载 作者:行者123 更新时间:2023-12-04 20:06:29 25 4
gpt4 key购买 nike

(我已经使用“asserta”将一个包含多列的大型 csv 文件放入数据库中。)有没有一种方法可以在不删除重复项的情况下按列进行数字排序?

从我的简单示例(按第二列/元素排序)中可以看出,predsort 方法删除重复项。

我可以通过切换和删除一些列并使用 msort 来解决这个问题,但我在这里特别要求您提供替代方案。

任何建议将不胜感激!

mycompare(X,E1,E2):- 
E1=[_,A1],E2=[_,A2],compare(X, A1, A2).

?- predsort(mycompare,[ [[95, 97], 11], [[97, 99], 4], [[97, 98], 4]],X).
X = [[[97, 99], 4], [[95, 97], 11]].

?- msort([ [[95, 97], 11], [[97, 99], 4], [[97, 98], 4]],X).
X = [[[95, 97], 11], [[97, 98], 4], [[97, 99], 4]].

%What I want is:
?- wanted_sort(...<as above>...).
X = [[[97, 98], 4], [[97, 99], 4], [[95, 97], 11] ].

最佳答案

执行此操作的标准方法是使用 keysort/2 .因此,首先您首先相应地映射元素,然后进行键排序,并映射回值。

list_pairs([], []).
list_pairs([E|Es], [B-E|Ps]) :-
E = [_,B],
list_pairs(Es, Ps).

pairs_values([], []).
pairs_values([_-V|Ps], [V|Vs]) :-
pairs_values(Ps, Vs).

andrew_sort(Xs, Ys) :-
list_pairs(Xs, Ps),
keysort(Ps, PsS),
pairs_values(PsS, Ys).

用于 keysort/2 的其他用途见 this list .

关于list - swi-prolog : how to sort list of lists by NTH element of sublist, 允许重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25124122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com