Сравнение списка с другими элементами списка и возврат его, если в нем есть похожие элементы

#flutter #dart

#flutter #dart

Вопрос:

 class Object1 {
  final String id;
  List<Object1list> lists = [];

  Object1({this.id, this.lists});

class Object1list {
  final String id;
  final String item;

  Object1list({this.id});
}


List<String> searchlist = ['object1','object2','object3'];
 

Что я хочу сделать, так это выполнить поиск элементов «object1list» для «любых» совпадений с элементами «searchlist» и
вернуть его как функцию contain, но я не знаю, как, что-то вроде:

 return ???.contains(???)
 

Кто-нибудь может мне помочь?

Ответ №1:

Приведенная ниже функция поможет вам получить совпадающие элементы:

 bool doSearch(List<String> searchlist, List<String> lists) {
  List<String> matched = [];
  for (String s in searchlist) {
    if (lists.contains(s)) {
      matched.add(s);
    } 
    //else {
    //  return false;  // Uncomment these lines if you want "lists" to contain all searched items
    //}
  }
  return matched.length > 0; // This for 0 or more items matched
}
 

Комментарии:

1. мне нужно вернуть его как логическое значение, поскольку .contains — это функция bool. Вы хотели, чтобы я вернул List<String> здесь, вы можете это исправить, пожалуйста?

2. @umarbeyoglu ответ был обновлен.

Ответ №2:

Другие способы:

 import 'package:enumerable/enumerable.dart';

void main() {
  final result1 = searchlist.isNotEmpty
      ? searchlist.distinct().length == searchlist.length
      : false;
  print(result1);

  // OR

  final result2 = searchlist.isNotEmpty
      ? searchlist.toSet().length == searchlist.length
      : false;
  print(result2);
}

List<String> searchlist = ['object1', 'object2', 'object3', 'object2'];