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
相关产品推荐
相关产品推荐

