用分隔符在dart中展开列表(数组)

2ledvvac  于 2023-07-31  发布在  其他
关注(0)|答案(3)|浏览(109)

我正在寻找一种方法来扩大与每个列表之间的分隔符列表。
示例(在子列表之间添加0):
我有这个

List<List<int>> list = [[1,2,3],[4,5,6],[7,8,9]];

字符串
我想要的:

List<int> newList = [1,2,3,0,4,5,6,0,7,8,9]


list.expand((element) => element)可以将子列表合并为:[1,2,3,4,5,6,7,8,9]
但分隔符iss不见了:-(

tzdcorbm

tzdcorbm1#

您可以通过添加分隔符项这样展开。

list.expand((element)=>[...element,0])

字符串
更新

list.reduce((a,b)=>[...a,0,...b])

x8goxv8g

x8goxv8g2#

一种解决方案是对Iterable进行扩展,如expandWithSeparator,并支持分隔符值:

void main() {
  List<List<int>> list = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ];

  print(list.expandWithSeparator((element) => element, 0).toList());
  // [1, 2, 3, 0, 4, 5, 6, 0, 7, 8, 9]
}

extension<E> on Iterable<E> {
  Iterable<T> expandWithSeparator<T>(
    Iterable<T> Function(E element) toElements,
    T separator,
  ) sync* {
    bool first = true;

    for (final element in this) {
      if (first) {
        first = false;
      } else {
        yield separator;
      }
      yield* toElements(element);
    }
  }
}

字符串

a9wyjsp7

a9wyjsp73#

List<List<int>> list = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ];
list.fold([], (total, item) => [...total, if (total.isNotEmpty) 0, ...item]);

字符串

相关问题