Поиск флаттера по строке случайной позиции

Я хочу выполнить поиск в списке строк, но поисковый запрос не обязательно должен быть упорядоченным в результате.

Скажем, у меня есть список строк

List<String> a = [
Fracture of right arm, 
Fracture of left arm, 
Fracture of right leg, 
Fracture of left leg,
];

и я хочу реализовать поисковый фильтр, чтобы при вводе fracture right результатом было

Fracture of right leg
Fracture of right arm

Как мне это сделать во флаттере? Потому что флаттер contains() распознает только когда я печатаю fracture **of** right

В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
0
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать этот код:

var aFilter = a.where((p0) => (p0.toLowerCase().contains("fracture of right")).toList();

И вы получите новый список с отфильтрованными элементами.

Уже используя этот метод, он не работает должным образом.

devsdocs 21.11.2022 13:12
Ответ принят как подходящий

Вы можете попробовать это:

List<String> a = [
    "Fracture of right arm",
    "Fracture of left arm",
    "Fracture of right leg",
    "Fracture of left leg",
  ];
  String query = "fracture right";

  List<String> terms = query.toLowerCase().split(" ");
  List<String> matches = a.where(
    (el) {
      var elLower = el.toLowerCase();
      for (var term in terms) {
        if (!elLower.contains(term)) {
          return false;
        }
      }
      return true;
    },
  ).toList();
  print(matches);

Обратите внимание, что это будет находить совпадения независимо от порядка, вы можете изменить его, чтобы запретить это.

Другие вопросы по теме