Dart リストで重複する値を一つにまとめる
重複する値があるリスト
List<int> list = [1, 2, 2, 3];
重複する値をまとめる(期待値)
list == [1, 2, 3];
方法 マップで定義してからリストに変換
Set<int> map = {1, 2, 2, 3}; // この時点で{1, 2, 3}になる
List<int> list = map.toList(); // [1, 2, 3]
ネットで見つけた方法
list.toSet().toList();
これも同じことをやってます。List⇒Map⇒List。
linterから改善を推奨される場合
以下の例だとlinterから改善を勧められました。
[1, 2, 2, 3].toSet().toList();
info: prefer_collection_literals
修正方法は以下の通り。
{1, 2, 2, 3}.toList();
実際のユースケースではリストをくっつけて重複する値をまとめたい場合があると思います。
list = [ ...listA, ...listB].toSet().toList();
しかし、上記の改善をlinterから勧められるので、以下の書き方になります。このようなケースでは最初からマップで扱いなさいということでしょうか。
list = {...mapA, ...mapB}.toList();
まとめ
- Listのリテラルは[]に入れる
- Mapのリテラルは{}に入れる
- 重複する値をまとめるListはMapにできないかを検討する