我有一套物品。從此我想洗掉所有重復的值。我試過這個
finalList = [...{...users!}];和這個print(users.toSet().toList());。但是兩者都在列印串列中的所有資料。它沒有洗掉重復值。下面是我的清單
List users = [
{
"userEmail":"[email protected]"
},
{
"userEmail":"[email protected]"
},
{
"userEmail":"[email protected]"
},
{
"userEmail":"[email protected]"
},
{
"userEmail":"[email protected]"
},
];
預期產出
List users = [
{
"userEmail":"[email protected]"
},
{
"userEmail":"[email protected]"
},
{
"userEmail":"[email protected]"
},
];
uj5u.com熱心網友回復:
讓我們試試,在這里你會得到唯一的串列
void main() {
var users = [
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
];
var uniqueList = users.map((o) => o["userEmail"]).toSet();
print(uniqueList.toList());
}
uj5u.com熱心網友回復:
您的嘗試不起作用,因為大多數物件(包括Map)使用==運算子的默認實作,該實作僅檢查物件標識。請參閱:集合如何確定兩個物件在 dart 中相等?以及Dart Set 如何比較專案?.
使一種方式List來Set對List方法的作業是通過明確指定如何Set應該比較的物件:
import 'dart:collection';
void main() {
List users = [
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
{"userEmail": "[email protected]"},
];
var finalList = [
...LinkedHashSet(
equals: (user1, user2) => user1['userEmail'] == user2['userEmail'],
hashCode: (user) => user['userEmail'].hashCode,
)..addAll(users)
];
finalList.forEach(print);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335684.html
