Dart Custom сортировка списка - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу создать конструктор предложений, в котором я хочу отображать поисковые предложения по изменению текста в TextField. Я хочу выполнить поиск на основе метода contains, но хочу отсортировать этот конкретный список на основе startsWith. Если я использую только startsWith, он игнорирует все остальные contains. Как я могу применить оба варианта одновременно? У меня есть список,

List<String> list = ["apple", "orange", "aaaaorange", "bbbborange","cccccorange"]

Теперь, если я поставлю только ora в поиске, он вернет меня в следующем порядке:

aaaaorange
bbbborange
cccccorange
orange

Что я хочу.

orange
aaaaorange
bbbborange
cccccorange

Код:

            return list
                .where((item) {
              return item.toLowerCase().contains(query.toLowerCase());
            }).toList(growable: false)
                  ..sort((a, b) {
                    return a.toLowerCase().compareTo(b.toLowerCase());
                  });

1 Ответ

1 голос
/ 05 апреля 2020

Проще всего думать о двух запросах по отдельности, а затем объединять результаты:

  var list = <String>[
    'apple',
    'orange',
    'aaaaorange',
    'bbbborange',
    'cccccorange',
  ];
  var pattern = 'ora';

  var starts = list.where((s) => s.startsWith(pattern)).toList();
  var contains = list
      .where((s) => s.contains(pattern) && !s.startsWith(pattern))
      .toList()
        ..sort((a, b) => a.toLowerCase().compareTo(b.toLowerCase()));

  var combined = [...starts, ...contains];
  print(combined);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...