大佬们问个排序问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制贴 AI 生成的内容
Red998
V2EX    程序员

大佬们问个排序问题

  •  
      Red998 2022-04-20 12:23:47 +08:00 2368 次点击
    这是一个创建于 1269 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    不过你这个逻辑感觉描述的很混乱,A 值=0 ,指的是比较的 2 个对象的值 A 都是 0 还是有一个为 0 ?
    twing37
        5
    twing37  
       2022-04-20 13:43:29 +08:00
    描述太过混乱.
    给出示例: 输入 输出
    edward1987
        6
    edward1987  
       2022-04-20 13:50:23 +08:00
    放弃理解,这描述写的啥跟啥,主题和#2 的描述根本对不上。。
    MoYi123
        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
    huring
        8
    huring  
       2022-04-20 14:43:38 +08:00
    我看了 5 分钟,实在是没能理解题目,太过抽象了,起码要不先比较 A 的值,A 相同了再比较 B....这个太抽象了
    darkengine
        9
    darkengine  
       2022-04-20 14:43:56 +08:00
    我尝试猜一下啊,需要排序的 List 里都是对象,这些对象的定义可以简化为:
    {
    A: Number,
    B: Number,
    C: Number,
    D: Number,
    }
    现在需要按照 op 给的规则给 List 里的对象排序,对吧?
    albertni
        10
    albertni  
       2022-04-20 14:50:49 +08:00 via Android
    写个两个元素之间的比较器不就完了
    Jtyczc
        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 从小到大排序就好
    ThreeK
        12
    ThreeK  
       2022-04-20 15:00:09 +08:00
    同意楼上的,既然描述不清楚,直接给几个例子
    Nich0la5
        13
    Nich0la5  
       2022-04-20 15:15:42 +08:00
    自定义个比较器就完事了 没看懂逻辑+1 op 的表述能力需要再提升下呀
    tusj
        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();
    }
    yuelang85
        15
    yuelang85  
       2022-04-22 00:28:46 +08:00
    哥们儿,你的“并且”其实是想表达“则”吗?

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

    其实是想说:if A == 0 then sort by B ???
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2947 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:40 PVG 21:40 LAX 06:40 JFK 09:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86