多列排序/多条件排序的深入探讨
By
admin
at 2022-01-29 • 0人收藏 • 1422人看过
所谓多列排序, 即多条件排序, 是有先后顺序分主次的排序要求.
首先满足A条件, 然后再满足B条件.......
更新:
新版aardio增加了
import web.script.json
可以取代楼下的加载json解析代码
//加载JSON转换库 var loadJSON2 = string.load("\json2.js");
只要使用了web.script.json就可以不用load了.
下面的代码内部就可以直接使用
JSON.stringify JSON.parse
了.
9 个回复 | 最后更新于 2023-01-06
回到 两列排序
这时候用thenby.js应该怎么写?
import console; import web.script; var vm = web.script(); //加载JSON转换库 var loadJSON2 = string.load("\json2.js"); //加载thenBy排序库 var loadThenBy = string.load("\thenBy.min.js"); //编写用户函数 var mainJS = /* function output(sdata) { var data = JSON.parse(sdata); s = firstBy(function (v1, v2) { return v1[0] - v2[0]; }) .thenBy(function (v1, v2) { return v1[1] - v2[1]; }) data.sort(s); return JSON.stringify(data); } */ vm.AddCode( loadJSON2++loadThenBy++mainJS ); //加载脚本 var tab = { {50,80}; {20,24}; {1,3}; {4,9}; {100,103}; {4,8}; } console.dump( web.json.tryParse(vm.Run("output",web.json.stringify(tab))) ) console.pause(true);
更多列排序测试
import console; import web.script; var vm = web.script(); //加载JSON转换库 var loadJSON2 = string.load("\json2.js"); //加载thenBy排序库 var loadThenBy = string.load("\thenBy.min.js"); //编写用户函数 var mainJS = /* function output(sdata) { var data = JSON.parse(sdata); s = firstBy(function (v1, v2) { return v1[0] - v2[0]; }) .thenBy(function (v1, v2) { return v1[1] - v2[1]; }) .thenBy(function (v1, v2) { return v1[2] - v2[2]; }) data.sort(s); return JSON.stringify(data); } */ vm.AddCode( loadJSON2++loadThenBy++mainJS ); //加载脚本 var tab = { {50,80,32,7633}; {20,24,543,45}; {1,3,897,453}; {4,3,78,35}; {100,33,453,3341}; {4,3,8,38}; } console.dump( web.json.tryParse(vm.Run("output",web.json.stringify(tab))) ) console.pause(true);
结果也是正确的.
排序颠倒 , 或者按照升降序排列 的设置
thenBy.js提供了一些常用配置, 具体可以百度搜下, 最简单的是排序方程后面加-1来颠倒顺序
import console; import web.script; var vm = web.script(); //加载JSON转换库 var loadJSON2 = string.load("\json2.js"); //加载thenBy排序库 var loadThenBy = string.load("\thenBy.min.js"); //编写用户函数 var mainJS = /* function output(sdata) { var data = JSON.parse(sdata); s = firstBy(function (v1, v2) { return v1[0] - v2[0]; },-1) .thenBy(function (v1, v2) { return v1[1] - v2[1]; },-1) data.sort(s); return JSON.stringify(data); } */ vm.AddCode( loadJSON2++loadThenBy++mainJS ); //加载脚本 var tab = { {-50,-80,32,7633}; {-20,-24,543,45}; {-1,-3,897,453}; {-4,-3,78,35}; {-100,-33,453,3341}; {-4,-2.3,8,38}; } console.dump( web.json.tryParse(vm.Run("output",web.json.stringify(tab))) ) console.pause(true);
2022-02-12
#6
# Python改写
tab = [ { 'id': 7, 'name': "Amsterdam", 'population': 750000, 'country': "Netherlands" }, { 'id': 12, 'name': "The Hague", 'population': 450000, 'country': "Netherlands" }, { 'id': 43, 'name': "Rotterdam", 'population': 600000, 'country': "Netherlands" }, { 'id': 5, 'name': "Berlin", 'population': 3000000, 'country': "Germany" }, { 'id': 42, 'name': "Dsseldorf", 'population': 550000, 'country': "Germany" }, { 'id': 44, 'name': "Stuttgard", 'population': 600000, 'country': "Germany" }, ] tab.sort(key=lambda x: (len(x['name']), x['population'], x['id']))
输出
C:\Users\Administrator\anaconda3\python.exe C:/Users/Administrator/Documents/PythonProject/spreadsheetlight/sort_test.py {'id': 5, 'name': 'Berlin', 'population': 3000000, 'country': 'Germany'} {'id': 12, 'name': 'The Hague', 'population': 450000, 'country': 'Netherlands'} {'id': 42, 'name': 'Dsseldorf', 'population': 550000, 'country': 'Germany'} {'id': 43, 'name': 'Rotterdam', 'population': 600000, 'country': 'Netherlands'} {'id': 44, 'name': 'Stuttgard', 'population': 600000, 'country': 'Germany'} {'id': 7, 'name': 'Amsterdam', 'population': 750000, 'country': 'Netherlands'}
Python对于这种排序什么的是非常方便的,aardio中使用python又是非常方便的,python中排好序,aardio直接调用就好了,哈哈
C#中多条件排序方法:
public class PosValue { public double p1 { get; set; } public double p2 { get; set; } public double pa12 { get; set; } public double pd12 { get; set; } public double pos { get; set; } } static void Main(string[] args) { List<PosValue> PosList = new List<PosValue>(); PosList.Add(new PosValue() { p1 = 10.1, p2 = 9, pa12 = 19.1, pd12 = 1.1, pos = 0 }); PosList.Add(new PosValue() { p1 = 9.8, p2 = 10.2, pa12 = 20, pd12 = 0.4, pos = 0 }); PosList.Add(new PosValue() { p1 = 10, p2 = 10.2, pa12 = 20.2, pd12 = 0.1, pos = 0 }); PosList.Add(new PosValue() { p1 = 10, p2 = 10.2, pa12 = 20, pd12 = 0.2, pos = 0 }); List<PosValue> list1 = PosList.OrderByDescending(t => t.pa12).ThenBy(x => x.pd12).ThenByDescending(y => y.p1).ToList(); foreach (var item in list1) { Console.WriteLine("{0},{1},{2},{3}", item.p1, item.p2, item.pa12, item.pd12); } Console.ReadKey(); }
登录后方可回帖
多列排序 / 多条件排序
利用多列条件排序的js库 thenby.js
https://github.com/Teun/thenBy.js
aardio调用thenby.js示例下载:
thenBy排序的简单调用.zip
aardio调用thenby.js示例:
测试中发现, 如果直接在js代码中用JSON.Stringfy( )会提示null错误, 所以需要手动引用json解析库.