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

如何使用Dart内置方法对多维数组按价格排序?

Dart多维列表排序与混合类型问题解答

一、混合类型列表的可行性

Dart里允许用List<dynamic>存储不同类型的元素(比如你示例里的整数价格和字符串名称),但这种做法类型不安全——编译器没法帮你检查类型,后续操作如果搞错类型很容易抛出运行时错误。

另外注意你代码里的一个bug:初始化时row = 4,生成的列表长度是4,索引范围是0-3,但后面却访问array[4],这会直接触发越界错误,得把row改成5或者去掉最后一组数据。

二、按价格排序的实现

Dart的List自带内置的sort()方法,完全不用自己写排序逻辑。你只需要给sort()传一个比较函数,用来定义两个元素的排序规则。

修正后的完整代码示例

void main() {
  int row = 5; // 修正row值,对应5组数据
  int col = 2; // 实际只用到2列,没必要设4
  var array = List.generate(row, (i) => List<dynamic>(col), growable: false);

  // 填充数据
  array[0][0] = 12;
  array[0][1] = "apple";

  array[1][0] = 10;
  array[1][1] = "drink";

  array[2][0] = 15;
  array[2][1] = "orange";

  array[3][0] = 8;
  array[3][1] = "chocolate bar";

  array[4][0] = 0;
  array[4][1] = "nut";

  // 按价格升序排序
  array.sort((a, b) => a[0].compareTo(b[0]));
  
  // 打印结果验证
  for (var item in array) {
    print("价格: ${item[0]}, 商品: ${item[1]}");
  }
}

代码说明

  • array.sort((a, b) => a[0].compareTo(b[0])):比较函数拿两个子列表的第一个元素(价格)对比,compareTo方法会返回负数、零、正数,分别对应a排在b前面、相等、a排在b后面,默认是升序。
  • 如果要降序排序,只需要把a和b反过来:array.sort((a, b) => b[0].compareTo(a[0]))。

更优建议

其实这种“[价格, 商品名]”的结构,用自定义类会比多维列表更清晰、更安全,比如:

class Product {
  final int price;
  final String name;

  Product(this.price, this.name);
}

void main() {
  var products = [
    Product(12, "apple"),
    Product(10, "drink"),
    Product(15, "orange"),
    Product(8, "chocolate bar"),
    Product(0, "nut"),
  ];

  products.sort((a, b) => a.price.compareTo(b.price));
  
  for (var p in products) {
    print("价格: ${p.price}, 商品: ${p.name}");
  }
}

这样不仅类型安全,代码可读性也更高,后续扩展属性(比如库存、分类)也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:35:17