말랑말랑제리스타일

Flutter 객체 List 중복 제거하는 방법(Dart) 본문

프로그래밍/플러터 앱개발

Flutter 객체 List 중복 제거하는 방법(Dart)

제리제리 2022. 11. 11. 13:39

Flutter를 쓰다보면 상당히 유용한 기능이 많은데요. 기본적으로 Dart 언어에서는 List 중복 제거는 지원하지 않는 것 같습니다. 그렇기 때문에 다양한 방법론들이 돌고 있는데 아마 Flutter에서 객체로 만든 List의 경우는 이 방법이 최선의 중복제거일 것 같네요.

Flutter 객체 List의 중복 제거에 사용되는 메서드

Flutter의 객체 List에서 중복 제거를 하기 위한 Dart의 기본메서드는 아래 두가지입니다.

반응형
List.removeWhere()
List.firstWhere()

원리는 Dart의 firstWhere을 이용해서 이 항목이 해당 조건의 첫번째 항목인지 여부를 확인하고 removeWhere 메서드를 이용해 아닌건 전부 삭제되도록 하는겁니다.

Flutter 에서 객체 List 제거 전체 소스

반응형

일단 전체 소스라고 해봐도 실제로 동작 구현은 한줄로 되는거고 Dart Pad에서 실행시키기 위해 리스트나 클래스 구현 부분이 대부분입니다.

class testClass{
  final int key;
  final String data;
  
  const testClass(this.key,this.data);
}
void main() {
  List<testClass> list = [testClass(1,'t1'), 
                          testClass(2,'t2'),
                          testClass(3,'t3'),
                          testClass(1,'t4'),
                          testClass(2,'t5'),
                          testClass(4,'t6'),
                          testClass(1,'t4')
                         ];
  print('original list');
  for (int i = 0; i < list.length; i++) {
    print(list[i].key.toString() + " " + list[i].data);
  }
  
  list.removeWhere((a) => a != list.firstWhere((b) => b.key == a.key ));
  
  print('distinct list');
  for (int i = 0; i < list.length; i++) {
    print(list[i].key.toString() + " " + list[i].data);
  }
}

testClass라는 클래스를 생성해주고 list라는 객체 List를 생성해줍니다.

original list로 출력하면 들어간 값들이 전부 출력되는데요.

여기서 중복 제거를 위해서 그 다음줄의 list.removeWhere((a) => a != list.firstWhere((b) => b.key == a.key )); 메서드를 사용해줄 수 있습니다.

저같은 경우 클래스에 key와 String 타입의 값을 넣은 객체를 만들었는데요.

해당 객체가 key 값이 있는 첫번째 값이 아니면 날려주는거죠.

그럼 남는 데이터는 해당 key의 앞쪽에 있는 데이터만 남게 됩니다.

Flutter 리스트에서 중복을 제거한 결과화면
리스트에서 중복 제거 결과화면

이런 결과가 나오게 되는거죠.

반응형

만약 여기서 Data 값이 가장 작은걸 남기려면 sort 메서드를 이용해 사전에 객체 list를 정렬해주면 되겠죠.

Comments