如何获得唯一列表

时间:2019-05-31 15:57:21

标签: flutter dart

我发现这样的在线解决方案:

import 'package:queries/collections.dart';

void main() {
  List<String> list = ["a", "a", "b", "c", "b", "d"];
  var result = new Collection(list).distinct();
  print(result.toList());
}

但是,我不知道如何将var result转换回List<Widget>

2 个答案:

答案 0 :(得分:2)

有一种方法容易得多,不需要任何其他导入。
您可以将List转换为本质上仅包含 distinct 元素的Set,然后将该Set转换回List

如果您使用的是 Dart 2.3 或更高版本(environment: sdk: ">=2.3.0 <3.0.0"),则可以使用以下惯用的版本:

List<String> list = ['a', 'a', 'b', 'c', 'b', 'd'];
List result = [...{...list}];

可迭代变量的...传播算子是just introduced with Dart 2.3

否则,您可以只使用旧语法:

List<String> list = ["a", "a", "b", "c", "b", "d"];
List result = list.toSet().toList();

答案 1 :(得分:0)

谢谢您的回答, 这是完整的代码,我尝试修改您的方法,但不起作用。 (仅适用于印刷作品)

      Future<List<List<Widget>>> getList(List<int> list, String column) async {

    List<Widget> list1 = List();
    List<Widget> list2 = List();
    List<Widget> list3 = List();

    //test
  List<String> testlista = List();
  testlista.add(result[0][column].toString());

    List<List<Widget>> listFromDB = [list1, list2, list3];
    var databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'books.db');
    Database database = await openDatabase(path, version: 1);
    for (int i = 0; i < list.length; i++) {

      var result = await database.rawQuery(
          'SELECT DISTINCT $column FROM planner WHERE id = ${list[i]}');

    //here polulate new List
    testlista.add(result[0][column].toString());


      if (list[i] < 18) list1.add(_item(result[0][column].toString()));
      if (list[i] > 17 && list[i] < 50)
        list2.add(_item(result[0][column].toString()));
      if (list[i] > 49) list3.add(_item(result[0][column].toString()));
    }

  //Now this give me corect print list without duplicate!!!
  for (int i = 0; i < testlista.length-1; i++) {
  print('FROM DELETE method: '+ deleteDuplicate(testlista)[i]);   


}



    await database.close();
    return listFromDB;
  }




   //Method for removingDuplicate

   List<String> deleteDuplicate(List<String> lista) {
    // List<String> result = Set.from(lista).toList();
    List<String> result = {...lista}.toList();
    return result;
  }