[Dart]リストを比較する方法

Dart

普通、比較といったら「==」を使います。

ですが、Dartのリストの場合は、「==」だと正しい比較が出来ません。

リストを比較するにはどうしたらいいのでしょうか?

スポンサーリンク

方法

Dartのリストを比較するには、比較するために用意された関数やクラスを使います。

リストの比較に使える関数やクラスは、次の3つです。

この3つのいずれかを使って、リストの比較は行います。

スポンサーリンク

使い方

インターフェース, インターネット, プログラム, ブラウザ, Www

比較に使う関数とクラスの使い方を解説します。

listEquals関数

まず、必要ならば「foundation」パッケージをインポートします。

import 'package:flutter/foundation.dart';

次に、引数に比較したいリストを2つ指定します。

   var list1 = <int>[1, 2, 3];
  
  var list2 = <int>[1, 2, 3];
  
  print(listEquals(list1, list2));

2つのリストが同じであれば「true」、そうでなければ「false」が返されます。

このように、引数に比較したいリストを指定するだけで、簡単に比較を行うことが出来ます。

listEquals関数には、注意点があります。

それは、リスト内の要素だけでなく、順番まで一緒でなければいけない点です。

例えば、以下のように要素が同じでも、順番が違えば「false」になります。

   var list1 = <int>[1, 2, 3];
  
  var list2 = <int>[3, 2, 1];
  
  print(listEquals(list1, list2));

順番とかは関係なく、要素が同じかどうかで比較したいという人は、「DeepCollectionEqualityクラス」を使いましょう。

ListEqualityクラス

プログラマー, プログラミング, コード, 仕事, コンピューター

まず、「collection」パッケージをインポートします。

import 'package:collection/collection.dart';

次に、listEqualityクラスのインスタンスを作ります。

var listEq = ListEquality().equals;

そして、作成したインスタンスに2つの引数を渡すことで、比較することが出来ます。

  var listEq = ListEquality().equals;
  
  var list1 = <int>[1, 2, 3];
  
  var list2 = <int>[1, 2, 3];
  
  print(listEq(list1, list2));

流れをまとめると、次のようになります。

  1. 「collection」パッケージのインポート
  2. ListEqualityクラスのインスタンスを作る
  3. 作成したインスタンスの引数に比較するリストを指定する

ListEqualityクラスは、リストの要素だけでなく、その順番まで比較します。

もし、順番に関係なく、リストを比較したいならば、「DeepCollectionEquality」クラスを使いましょう

DeepCollectionEqualityクラス

デュアルスクリーン, プログラミング, コーディング, プレビュー, Html

まず、「collection」パッケージをインポートします。

import 'package:collection/collection.dart';

次に「DeepCollectionEqualityクラス」のインスタンスを作成します。

var deepEq = DeepCollectionEquality().equals;

そして、作成したインスタンスの引数に比較したいリストを指定します。

  var deepEq = DeepCollectionEquality().equals;
  
  var list1 = <int>[1, 2, 3];
  
  var list2 = <int>[1, 2, 3];
  
  print(deepEq(list1, list2));

流れをまとめると、次のようになります。

  1. 「collection」パッケージのインポート
  2. DeepCollectionEqualityクラスのインスタンスを作る
  3. 作成したインスタンスの引数に比較するリストを指定する

また、「DeepCollectionEqualityクラス」の強みは、順序関係なく要素を比較できることにあります。

もし、順序に関係なく要素だけを比較したいならば、次のようにします。

  var deepEq = DeepCollectionEquality.unordered().equals;
  
  var list1 = <int>[1, 2, 3];
  
  var list2 = <int>[3, 2, 1];
  
  print(deepEq(list1, list2));

DeepCollectionEquality.unordered().equals」のようにインスタンスの仕方を変えることで、順番に関係なく比較することが出来ます。

スポンサーリンク

まとめ

リストを比較するには、「==」ではなく、比較用のクラスや関数を使います。

リストを比較することが出来るクラスや関数は次の3つです。

「listEquals関数」と「ListEqualityクラス」は、順序と要素が一致しているかを比較します。

そして、「DeepCollectionEqualityクラス」は、順序関係なく要素が一致しているかを比較することが出来ます。

スポンサーリンク

参考

How can I compare Lists for equality in Dart?
I'm comparing two lists in Dart like this: main() { if ( == ) { print("Equal"); } else { print("Not equal"); } } But they are n...
スポンサーリンク

オススメの記事

[Dart]List(リスト)に要素を追加する方法

[Dart][Flutter]リストの要素を削除する方法

[Dart]リスト(List)にフィルター(filter)処理をする方法

コメント

タイトルとURLをコピーしました