已知字段 A 、B 、C 、D 都有值。按照以下优先级进行排序,相同的则向下取一个排序
1.A 值=0 并且 B 的值最大
2.A 值=1 并且 C 的值大
3.A 值 =0 并且 D 的值大
4.A 值 =1 并且 D 的值 怎么合并起来排序
1
yuelang85 2022-04-20 12:39:18 +08:00
做一个临时字段:sort_index ,值等于你这个逻辑中的序号( 1 ,2 ,3 ,4 ),按照 sort_index 排序
|
2
Red998 OP @yuelang85 可能我没描述清楚 。 序号都是排序条件从大到小倒叙, 序号都是条件
比如 有个 List 排序 对象中 A 字段值等于 0 和 B 字段值从大到小排序 , A 字段值=0 并且 C 的值从大到小排序,A 字段值=1 并且 D 的值从大到小排序 , A 字段值=1 并且 D 的值。 相同就取下一个规则 |
3
thunderw 2022-04-20 13:21:59 +08:00
你能拿 ABCD 算一个分数出来按分数排序吗?感觉看了你的描述,不理解你的 2 和 3 什么关系。
|
4
jjwjiang 2022-04-20 13:36:05 +08:00
不就是一个自定义比较器吗?把你的逻辑写在里面传给排序不就好了
排序本质就是 2 个元素如何比较 不过你这个逻辑感觉描述的很混乱,A 值=0 ,指的是比较的 2 个对象的值 A 都是 0 还是有一个为 0 ? |
5
twing37 2022-04-20 13:43:29 +08:00
描述太过混乱.
给出示例: 输入 输出 |
6
edward1987 2022-04-20 13:50:23 +08:00
放弃理解,这描述写的啥跟啥,主题和#2 的描述根本对不上。。
|
7
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 |
8
huring 2022-04-20 14:43:38 +08:00
我看了 5 分钟,实在是没能理解题目,太过抽象了,起码要不先比较 A 的值,A 相同了再比较 B....这个太抽象了
|
9
darkengine 2022-04-20 14:43:56 +08:00
我尝试猜一下啊,需要排序的 List 里都是对象,这些对象的定义可以简化为:
{ A: Number, B: Number, C: Number, D: Number, } 现在需要按照 op 给的规则给 List 里的对象排序,对吧? |
10
albertni 2022-04-20 14:50:49 +08:00 via Android
写个两个元素之间的比较器不就完了
|
11
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 从小到大排序就好 |
12
ThreeK 2022-04-20 15:00:09 +08:00
同意楼上的,既然描述不清楚,直接给几个例子
|
13
Nich0la5 2022-04-20 15:15:42 +08:00
自定义个比较器就完事了 没看懂逻辑+1 op 的表述能力需要再提升下呀
|
14
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(); } |
15
yuelang85 2022-04-22 00:28:46 +08:00
哥们儿,你的“并且”其实是想表达“则”吗?
比如:”1.A 值=0 并且 B 的值最大“ 其实是想说:if A == 0 then sort by B ??? |