【问题标题】:How to use a SplayTreeMap on Firebase snapshot dictionary in dart/Flutter?如何在 dart/Flutter 中的 Firebase 快照字典上使用 SplayTreeMap?
【发布时间】:2018-05-19 18:27:50
【问题描述】:

我已通过 StreamBuilder 成功获取数据并需要对其进行排序。如何按键对快照数据的 Map 进行排序?另外,如果您举一个这样做的例子,我的价值也会有所帮助。我想我想做一个 SplayTreeMap,但如果有更好的方法请提供。这是我的字典……

{Vid2: {imageString: https://i.ytimg.com/vi/Amq-qlqbjYA/mqdefault.jpg, title: BLACKPINK - '마지막처럼 (AS IF IT'S YOUR LAST)' M/V, rank: 2, videoID: Amq-qlqbjYA}, Vid10: {imageString: https://i.ytimg.com/vi/KSH-FVVtTf0/mqdefault.jpg, title: EXO 엑소 'Monster' MV, rank: 10, videoID: KSH-FVVtTf0}, Vid6: {imageString: https://i.ytimg.com/vi/BVwAVbKYYeM/mqdefault.jpg, title: [MV] BTS(방탄소년단) _ DOPE(쩔어), rank: 6, videoID: BVwAVbKYYeM}, Vid3: {imageString: https://i.ytimg.com/vi/m8MfJg68oCs/mqdefault.jpg, title: [MV] BTS(방탄소년단) _ Boy In Luv(상남자), rank: 3, videoID: m8MfJg68oCs}, Vid4: {imageString: https://i.ytimg.com/vi/9pdj4iJD08s/mqdefault.jpg, title: BLACKPINK - '불장난 (PLAYING WITH FIRE)' M/V, rank: 4, videoID: 9pdj4iJD08s}, Vid1: {imageString: https://i.ytimg.com/vi/3s1jaFDrp5M/mqdefault.jpg, title: EPIK HIGH - 'BORN HATER' M/V, rank: 1, videoID: 3s1jaFDrp5M}, Vid8: {imageString: https://i.ytimg.com/vi/3QAcvc4Ysl0/mqdefault.jpg, title: LONNI - LA KPOP 2, rank: 8, videoID: 3QAcvc4Ysl0}, Vid5: {imageString: https://i.ytimg.com/vi/2ips2mM7Zqw/default.jpg, title: BIGBANG - 뱅뱅뱅 (BANG BANG BANG) M/V, rank: 5, videoID: 2ips2mM7Zqw}}

我想通过按键显示它... 视频1、视频2、视频3...

或按等级之类的值,即... Vid1:排名“1”,Vid2:排名“2”,Vid3:排名“3”...

【问题讨论】:

    标签: sorting dictionary dart flutter splay-tree


    【解决方案1】:

    如果源是地图,这应该做你想要的:

    final sorted = new SplayTreeMap<String,dynamic>.from(map, (a, b) => a.compareTo(b));
    

    DartPad example

    【讨论】:

    • 除了读回 1、10、2、3、4 外,它可以工作......关于如何让它以数字方式读取的任何想法??
    • ... 还是按'rank'键?
    • 您可以自定义 order 函数 ((a, b) =&gt; a.compareTo(b)) 以删除 Vid 前缀并将字符串的其余部分解析为整数并在这些整数值上调用 .compareTo 或使用 (a, b) =&gt; map[a]['rank'].compareTo(map[b]['rank'])
    • 还有一件事...排序似乎只返回 1 个匹配值集,即如果有 2 个节点 {rank: 10} 我得到第一个但不是第二个或第三个.如何在我的 SplayTreeMap 中包含所有节点?
    • 看来你需要在这里使用isValidKey 方法...SplayTreeMap.from( Map other, [ int compare( K key1, K key2 ), bool isValidKey( potentialKey ) ]) 但不清楚如何
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2021-07-03
    • 2021-08-09
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多