我发现这样的在线解决方案:
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>
。
答案 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;
}