首页 > 解决方案 > 从列表中创建子列表并将所有子列表添加到 Flutter 的一个列表中

问题描述

任何人都可以帮助我列出概念吗?我有一个名称列表,我想用相同的字母制作单词的子列表,然后将所有这些子列表添加到列表中。这是我的代码:

  List<String> items = [
    'one',
    'two',
    'three',
    'four',
    'five',
    'six',
    'seven',
    'eight',
    'nine',
    'ten'
  ];
  List<String> sublist;
  @override
  void initState() {
    super.initState();
    //----- sort alphabetically
    items.sort((a, b) =>
        a.toString().toLowerCase().compareTo(b.toString().toLowerCase()));
    //----- get the initials
    sublist = items.map((element) => element[0]).toList();
    //----- remove duplicates
    sublist = sublist.toSet().toList();
    // ---------------- generate lists
    List s = [];
    List<List> listOfLists = [];
    sublist.forEach((letter) async {
      items.forEach((item) =>
          item.startsWith(letter) ? s.add(item) : {items.iterator.moveNext()});
      listOfLists.add(s);
      print(letter);
      print(s);
      s.clear();
    });
    print(listOfLists); 

这就是我想从 listOfList 得到的:[ [八],[五,四],[九],[一],[七,六],[十,三,二]]但我只得到空的子列表:这是我的结果:在此处输入图像描述

标签: listflutterdartsublist

解决方案


您正在清除每次迭代中的列表。

删除 s.clear() 并将 List s = [] 移到 for each 函数中

// ---------------- generate lists
    List<List> listOfLists = [];
    sublist.forEach((letter) async {
      List s = [];

      items.forEach((item) => item.startsWith(letter) ? s.add(item) : {items.iterator.moveNext()});
      listOfLists.add(s);
      print(letter);
      print(s);
    });

无论如何,我建议您不要在另一个 forEach 中使用 forEach

然后你可以使用:

    List<List> listOfLists = [];
    sublist.forEach((letter) async {
      List s = items.where((item) => item.startsWith(letter)).toList();
      listOfLists.add(s);
    });

推荐阅读