【Dart】Listの重複を削除・重複の有無と重複要素の発見

  • 2024年2月16日
  • 2024年2月16日
  • Dart

はじめに

アプリの開発でデータの中に重複要素がないか確認したときに、重複要素はあるけど、なにが重複しているかも明記したかった。List内の重複要素を扱う方法について、他の記事を検索しました。しかし重複要素の削除はあったものの、重複要素の発見に関する解説が見つからなかったため、本記事を作成することにしました。
この記事は、Listの重複を削除する方法、重複の有無を見つける方法、そして重複している具体的な要素を発見する方法について、初心者にもわかりやすく解説します。

対象者

  • プログラミング初心者
  • Dartや他のプログラミング言語でListや配列を扱っている方
  • コードを書く上で、データの重複を避けたい、または重複を検出したい方

Listの重複を削除する

List内の重複を削除する最も簡単な方法は、ListをSetに変換し、再びListに戻すことです。Setは重複を許さないコレクションであるため、この変換プロセスによって重複が自動的に削除されます。

final list2 = [1, 2, 3, 2];
final uniqueList = list2.toSet().toList();

このコードは、list2から重複する2を削除し、[1, 2, 3]という重複のないListを生成します。必要に応じて、.sort()メソッドを使用して要素を並べ替えることもできます。

final list1 = [1, 2, 3];
final list2 = [1, 2, 3, 2];

// 重複を削除
expect(list2.toSet().toList()..sort((e1, e2) => e1 - e2), list1);

Listの重複の有無を見つける

List内に重複が存在するかどうかを確認するには、Listの長さと、Setに変換した後の長さを比較します。もし長さが異なれば、重複が存在するということです。

final list1 = [1, 2, 3];
final list2 = [1, 2, 3, 2];

bool hasDuplicates(List list) => list.length != list.toSet().length;

// 使用例
expect(hasDuplicates(list1), false);
expect(hasDuplicates(list2), true);

Listの重複要素の発見する

重複している具体的な要素を見つけるには、少し複雑なロジックが必要です。以下の方法では、各要素に対して、その要素がList内に複数存在するかどうかをチェックします。

final list2 = [1, 2, 3, 2];
final duplicates = 
    list2.where((element) => list2.where((e) => e == element).length > 1).toSet();
expect(duplicates, {2});

このコードは、list2内で重複している要素、この場合2を見つけ出します。

まとめ

この記事では、Listの重複を削除する方法、重複の有無を確認する方法、そして重複している具体的な要素を発見する方法について解説しました。これらの技術は、データの整理やバリデーションに非常に役立ちます。Dartの他、多くのプログラミング言語で似たようなアプローチを取ることができるため、この知識は広く応用可能です。プログラミングの旅において、この記事があなたの役に立つことを願っています。