You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何对列表进行二次排序?

实现二次排序的解决方案

要得到你期望的排序结果,核心是在排序函数中先按数值升序比较,当数值相同时再按字母升序(不区分大小写)比较,具体修改如下:

修改你的stream函数中的sort参数:

Stream<List<Model>> stream() {
  return function(
    // 保留原有其他参数
    sort: (a, b) {
      // 第一步:比较数值
      final numResult = a.number.compareTo(b.number);
      if (numResult != 0) {
        return numResult;
      }
      // 第二步:数值相等时,比较字母(不区分大小写)
      return a.alphabet.toLowerCase().compareTo(b.alphabet.toLowerCase());
    }
  );
}

代码说明

  1. 优先比较两个Model的数值:通过compareTo方法得到结果,若结果不为0,直接用该结果排序(升序)。
  2. 当数值相等时,再比较字母的小写形式:确保排序不区分大小写,同时让数值相同的元素按字母顺序排列。

用这段代码处理你的示例列表,会得到你期望的结果:

[Model("C", 3), Model("A", 5), Model("D", 5), Model("F", 5), Model("B", 7)]

补充:若需先按字母排序再按数值排序

如果你的实际需求是先按字母排序,字母相同再按数值排序(与你给出的期望结果不符,但提供方案参考),只需调换比较顺序:

sort: (a, b) {
  final alphaResult = a.alphabet.toLowerCase().compareTo(b.alphabet.toLowerCase());
  if (alphaResult != 0) {
    return alphaResult;
  }
  return a.number.compareTo(b.number);
}

内容的提问来源于stack exchange,提问作者My Car

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:10:27