首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内置排序/4的快速替代

内置排序/4的快速替代
EN

Stack Overflow用户
提问于 2016-02-22 18:28:49
回答 1查看 86关注 0票数 1

我正在寻找sort/4的替代方案。我目前无法使用内置版本。

如果它是可用的,那么我所需要的语法将类似于这个sort(1, @>=, List, Sorted)。列表中的元素看起来像这个([Value:x:y,z:a]:[], ...)。结果必须根据值参数按降序排序。

用于测试的示例列表:

[ 16:x:y,z:a:[],64:x:y,z:a:[],4:x:y,z:a:[],1024:x:y,z:a:[],0:x:y,z:a:[],100:X:y:y,z:a:[],100:y:y,z: 50:x:y,z:a:[],-100:x:y,z:a:[],0:y,z:a:[],X:y,z:a:[]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-22 19:38:58

只需提取密钥,将其放在结构前面,调用sort/2 (或msort/2,以避免丢失重复项),然后从排序列表中删除键。

可以使用相同的代码(列表访问)将密钥放在前面并删除它。最后一步将反转列表,以获得降序。

代码语言:javascript
复制
alternative_sort(Structs, Sorted) :-
  structs_keyed(Structs, Keyed),
  sort(Keyed, Temp),
  structs_keyed(TempR, Temp),
  reverse(TempR, Sorted).

structs_keyed(Sorted, Temp) :- % assume library(yall) available
  maplist([S,K]>>(S=([Value|_]:_),K=Value/S), Sorted, Temp).

要成为真,因为排序键值--它是第一个值元素--可以简化为

代码语言:javascript
复制
alternative_sort(Structs, Sorted) :-
  sort(Structs, Ascending),
  reverse(Ascending, Sorted).
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35561116

复制
相关文章

相似问题

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