大佬们问个排序问题

2022-04-20 12:23:47 +08:00
 Red998

已知字段 A 、B 、C 、D 都有值。按照以下优先级进行排序,相同的则向下取一个排序

1.A 值=0 并且 B 的值最大

2.A 值=1 并且 C 的值大

3.A 值 =0 并且 D 的值大

4.A 值 =1 并且 D 的值 怎么合并起来排序

2005 次点击
所在节点    程序员
15 条回复
yuelang85
2022-04-20 12:39:18 +08:00
做一个临时字段:sort_index ,值等于你这个逻辑中的序号( 1 ,2 ,3 ,4 ),按照 sort_index 排序
Red998
2022-04-20 13:00:34 +08:00
@yuelang85 可能我没描述清楚 。 序号都是排序条件从大到小倒叙, 序号都是条件
比如 有个 List 排序 对象中 A 字段值等于 0 和 B 字段值从大到小排序 , A 字段值=0 并且 C 的值从大到小排序,A 字段值=1 并且 D 的值从大到小排序 , A 字段值=1 并且 D 的值。 相同就取下一个规则
thunderw
2022-04-20 13:21:59 +08:00
你能拿 ABCD 算一个分数出来按分数排序吗?感觉看了你的描述,不理解你的 2 和 3 什么关系。
jjwjiang
2022-04-20 13:36:05 +08:00
不就是一个自定义比较器吗?把你的逻辑写在里面传给排序不就好了

排序本质就是 2 个元素如何比较

不过你这个逻辑感觉描述的很混乱,A 值=0 ,指的是比较的 2 个对象的值 A 都是 0 还是有一个为 0 ?
twing37
2022-04-20 13:43:29 +08:00
描述太过混乱.
给出示例: 输入 输出
edward1987
2022-04-20 13:50:23 +08:00
放弃理解,这描述写的啥跟啥,主题和#2 的描述根本对不上。。
MoYi123
2022-04-20 13:56:24 +08:00
建议放弃抽象的描述,实际一点, 把这几个例子答案是什么, 怎么算的说一下吧

A=0,B=9,C=4,D=5
A=0,B=3,C=10,D=5
A=1,B=3,C=4,D=13
A=1,B=3,C=4,D=5
huring
2022-04-20 14:43:38 +08:00
我看了 5 分钟,实在是没能理解题目,太过抽象了,起码要不先比较 A 的值,A 相同了再比较 B....这个太抽象了
darkengine
2022-04-20 14:43:56 +08:00
我尝试猜一下啊,需要排序的 List 里都是对象,这些对象的定义可以简化为:
{
A: Number,
B: Number,
C: Number,
D: Number,
}
现在需要按照 op 给的规则给 List 里的对象排序,对吧?
albertni
2022-04-20 14:50:49 +08:00
写个两个元素之间的比较器不就完了
Jtyczc
2022-04-20 14:58:15 +08:00
参考#2 咯,
做一个临时字段:sort_index 吧

比如:
1 、先取出第一种情况,计算 sort_index

A 值=0 并且 B 的值最大,sort_index 等于 1
A 值=0 并且 B 的值排行第二,sort_index 等于 2
……
A 值=0 并且 B 的值排行 10 ,sort_index 等于 10

2 、取出第二种情况
A 值=1 并且 C 的值大,sort_index 等于 11
……

3 、取出第三种情况……
……


好了,最后只需要按 sort_index 从小到大排序就好
ThreeK
2022-04-20 15:00:09 +08:00
同意楼上的,既然描述不清楚,直接给几个例子
Nich0la5
2022-04-20 15:15:42 +08:00
自定义个比较器就完事了 没看懂逻辑+1 op 的表述能力需要再提升下呀
tusj
2022-04-20 15:45:04 +08:00
int Score() {
themax = Max(B, C, D);
if (A == 0 && B == themax) return 1;
// if (A == 0 && C == themax) return ? 不可能有此种情况?
if (A == 0 && D == themax) return 3;
// if (A == 1 && B == themax) return ? 不可能有此种情况?
if (A == 1 && C == themax) return 2;
if (A == 1 && D == themax) return 4;
return 5;
}

bool Compare(l, r) {
return l.Score() < r.Score();
}
yuelang85
2022-04-22 00:28:46 +08:00
哥们儿,你的“并且”其实是想表达“则”吗?

比如:”1.A 值=0 并且 B 的值最大“

其实是想说:if A == 0 then sort by B ???

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848103

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX