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にできないかを検討する

参考