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

Dart如何提取嵌套列表元素 修复递归快排返回嵌套数组问题

Dart递归实现快排返回嵌套数组问题修复

问题原因

当前快排实现的返回逻辑直接将递归调用得到的less排序结果、基准值pivot、greater排序结果用方括号包裹为新列表。由于递归调用quickSort本身返回的就是列表类型,直接将列表作为元素放入新列表,就会产生多层嵌套结构,最终输出[[1], 2, [[], 4, [[7], 9, [12]]]]这类不符合预期的结果。

修复方案

不需要额外编写嵌套列表展平逻辑,只需要在拼接返回结果时,将递归返回的列表元素展开到当前列表层级即可,有两种常用实现方式:

  • 使用Dart的展开运算符...(推荐,写法简洁)
  • 使用列表的addAll方法逐段拼接(兼容低版本Dart环境)

修复后完整代码

void main(List<String> arguments) {
  List myList = [2, 4, 9, 7, 1, 12];
  print(quickSort(myList));
}

List quickSort(var arr){
  if (arr.length < 2){
    return arr;
  } else {
    int pivot = arr[0];
    List less = [];
    List greater = [];
    arr.removeAt(0);
    arr.forEach((element) {
      if (element > pivot){
        greater.add(element);
      } else {
        less.add(element);
      }
    });
    // 展开递归返回的列表元素,避免嵌套
    return [...quickSort(less), pivot, ...quickSort(greater)];
  }
}

低版本兼容写法

如果你的运行环境不支持展开运算符,可以将返回逻辑替换为addAll拼接的方式:

List result = [];
result.addAll(quickSort(less));
result.add(pivot);
result.addAll(quickSort(greater));
return result;

运行修复后的代码,将直接输出期望的一维有序列表:[1, 2, 4, 7, 9, 12]。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:00:59