如何在 dart/Flutter 中使用 Firebase 快照字典上的 SplayTreeMap?

Cha*_* Jr 4 sorting dictionary splay-tree dart flutter

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

\n\n
{Vid2: {imageString: https://i.ytimg.com/vi/Amq-qlqbjYA/mqdefault.jpg, title: BLACKPINK - \'\xeb\xa7\x88\xec\xa7\x80\xeb\xa7\x89\xec\xb2\x98\xeb\x9f\xbc (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 \xec\x97\x91\xec\x86\x8c \'Monster\' MV, rank: 10, videoID: KSH-FVVtTf0}, Vid6: {imageString: https://i.ytimg.com/vi/BVwAVbKYYeM/mqdefault.jpg, title: [MV] BTS(\xeb\xb0\xa9\xed\x83\x84\xec\x86\x8c\xeb\x85\x84\xeb\x8b\xa8) _ DOPE(\xec\xa9\x94\xec\x96\xb4), rank: 6, videoID: BVwAVbKYYeM}, Vid3: {imageString: https://i.ytimg.com/vi/m8MfJg68oCs/mqdefault.jpg, title: [MV] BTS(\xeb\xb0\xa9\xed\x83\x84\xec\x86\x8c\xeb\x85\x84\xeb\x8b\xa8) _ Boy In Luv(\xec\x83\x81\xeb\x82\xa8\xec\x9e\x90), rank: 3, videoID: m8MfJg68oCs}, Vid4: {imageString: https://i.ytimg.com/vi/9pdj4iJD08s/mqdefault.jpg, title: BLACKPINK - \'\xeb\xb6\x88\xec\x9e\xa5\xeb\x82\x9c (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 - \xeb\xb1\x85\xeb\xb1\x85\xeb\xb1\x85 (BANG BANG BANG) M/V, rank: 5, videoID: 2ips2mM7Zqw}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想通过按键显示它...\nVid1、Vid2、Vid3...

\n\n

或按等级等值,即...\nVid1:等级“1”,Vid2:等级“2”,Vid3:等级“3”...

\n

Gün*_*uer 8

如果源是地图,这应该可以满足您的要求:

final sorted = new SplayTreeMap<String,dynamic>.from(map, (a, b) => a.compareTo(b));
Run Code Online (Sandbox Code Playgroud)

DartPad 示例

  • 您可以自定义 order 函数(`(a, b) =&gt; a.compareTo(b)`)以删除 `Vid` 前缀并将字符串的其余部分解析为整数,并对这些整数值调用 `.compareTo` 或使用 `(a, b) =&gt; map[a]['rank'].compareTo(map[b]['rank'])` (2认同)