10 удобных методов поиска элементов в списке с помощью Dart

При работе со списками в Dart часто возникает необходимость найти конкретные элементы по определенным условиям. В этой статье мы рассмотрим различные методы выполнения этой задачи. Мы углубимся в примеры кода и будем использовать разговорный язык, чтобы сделать концепции более доступными. Итак, давайте начнем и изучим несколько полезных приемов поиска элементов в списке с помощью Dart!

Метод 1: линейный поиск
Самый простой подход — выполнить линейный поиск путем перебора каждого элемента списка до тех пор, пока не будет найдено совпадение. Вот пример:

List<int> numbers = [1, 2, 3, 4, 5];
int target = 3;
int? findElement(List<int> list, int target) {
  for (int i = 0; i < list.length; i++) {
    if (list[i] == target) {
      return list[i];
    }
  }
  return null;
}
void main() {
  int? element = findElement(numbers, target);
  print(element != null ? "Element found: $element" : "Element not found");
}

Метод 2: indexOf
Dart предоставляет метод indexOf(), который возвращает индекс первого вхождения данного элемента в список. Вот пример:

List<String> fruits = ['apple', 'banana', 'orange'];
String target = 'banana';
void main() {
  int index = fruits.indexOf(target);
  if (index != -1) {
    print("Element found at index $index");
  } else {
    print("Element not found");
  }
}

Метод 3: LastIndexOf
Подобно indexOf(), метод lastIndexOf()возвращает индекс последнего вхождения данного элемента в список. Вот пример:

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
String target = 'banana';
void main() {
  int index = fruits.lastIndexOf(target);
  if (index != -1) {
    print("Element found at index $index");
  } else {
    print("Element not found");
  }
}

Метод 4: содержит
Метод contains()проверяет, содержит ли список определенный элемент, и возвращает логическое значение. Вот пример:

List<int> numbers = [1, 2, 3, 4, 5];
int target = 3;
void main() {
  bool containsElement = numbers.contains(target);
  print(containsElement ? "Element found" : "Element not found");
}

Метод 5: где
Метод where()возвращает итерацию, содержащую все элементы, удовлетворяющие заданному условию. Вот пример:

List<int> numbers = [1, 2, 3, 4, 5];
int target = 3;
void main() {
  List<int> foundElements = numbers.where((element) => element == target).toList();
  if (foundElements.isNotEmpty) {
    print("Elements found: $foundElements");
  } else {
    print("No elements found");
  }
}

Метод 6: firstWhere
Метод firstWhere()возвращает первый элемент в списке, удовлетворяющий заданному условию. Вот пример:

List<int> numbers = [1, 2, 3, 4, 5];
int target = 3;
void main() {
  int? foundElement = numbers.firstWhere((element) => element == target, orElse: () => null);
  print(foundElement != null ? "Element found: $foundElement" : "Element not found");
}

Метод 7: singleWhere
Метод singleWhere()возвращает единственный элемент в списке, который удовлетворяет заданному условию. Вот пример:

List<int> numbers = [1, 2, 3, 4, 5];
int target = 3;
void main() {
  int? foundElement = numbers.singleWhere((element) => element == target, orElse: () => null);
  print(foundElement != null ? "Element found: $foundElement" : "Element not found");
}

Метод 8: indexWhere
Метод indexWhere()возвращает индекс первого элемента, удовлетворяющего заданному условию. Вот пример:

List<int> numbers = [1, 2, 3, 4, 5];
int target = 3;
void main() {
  int index = numbers.indexWhere((element) => element == target);
  if (index != -1) {
    print("Element found at index $index");
  } else {
    print("Element not found");
  }
}

Метод 9: Any
Метод any()проверяет, удовлетворяет ли какой-либо элемент в списке заданному условию, и возвращает логическое значение. Вот пример:

List<int> numbers = [1, 2, 3, 4, 5];
bool hasEvenNumber = numbers.any((element) => element % 2 == 0);
void main() {
  print(hasEvenNumber ? "List contains at least one even number" : "List does not contain any even number");
}

Метод 10: пользовательские методы
В дополнение к встроенным методам вы также можете создавать свои собственные методы для поиска элементов в списке на основе определенных критериев. Это обеспечивает большую гибкость и индивидуальные решения в соответствии с вашими уникальными требованиями. Вот пример:

List<String> names = ['John', 'Jane', 'Michael', 'Sarah'];
String findNameStartingWith(String prefix) {
  for (String name in names) {
    if (name.startsWith(prefix)) {
      return name;
    }
  }
  return '';
}
void main() {
  String foundName = findNameStartingWith('J');
  if (foundName.isNotEmpty) {
    print("Name found: $foundName");
  } else {
    print("Name not found");
  }
}

В этой статье мы рассмотрели десять различных методов поиска элементов в списке с помощью Dart. От линейного поиска до встроенных методов, таких как indexOf()и where(), а также возможности создавать собственные методы — теперь в вашем распоряжении множество методов. Понимая эти методы, вы сможете писать более эффективный и действенный код при работе со списками в Dart.