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

Dart如何迭代多层嵌套列表直至最内层为空列表

Dart多层嵌套列表逐层遍历实现方案

我们可以根据嵌套深度选择两种实现方案:

1. 递归实现(嵌套深度<1000时推荐)

直接对每个元素做类型判断,如果是List就继续遍历,直到碰到空列表为止:

void traverseNestedList(dynamic list) {
  // 先判断当前元素是不是List
  if (list is! List) return;
  
  // 此处可插入对当前层级列表的自定义处理逻辑
  print('当前遍历到的列表:$list,长度:${list.length}');
  
  // 遍历当前列表的所有子元素
  for (var element in list) {
    traverseNestedList(element);
  }
}

2. 广度优先迭代实现(深度无限制,无栈溢出风险)

如果嵌套层数特别高,递归会触发栈溢出,用队列实现逐层迭代更稳妥:

void traverseNestedListIterative(dynamic rootList) {
  if (rootList is! List) return;
  
  // 用队列存储待遍历的列表
  final queue = <List>[rootList];
  
  while (queue.isNotEmpty) {
    final currentList = queue.removeAt(0);
    // 此处可插入对当前层级列表的自定义处理逻辑
    print('当前遍历到的列表:$currentList,长度:${currentList.length}');
    
    // 把当前列表的所有子List加入队列,等待后续遍历
    for (var element in currentList) {
      if (element is List) {
        queue.add(element);
      }
    }
  }
}

测试示例

针对你提到的三层嵌套空列表,可以用如下代码测试:

void main() {
  final nestedList = [
    [
      []
    ]
  ];
  
  print('===== 递归遍历结果 =====');
  traverseNestedList(nestedList);
  
  print('\n===== 迭代遍历结果 =====');
  traverseNestedListIterative(nestedList);
}

运行后会依次输出三层列表的内容,直到最内层的空列表为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:09:04