Ответ 1
В Dart нет функции сравнения строк без учета регистра (или функции равенства строк). В основном потому, что это сложно, и нет единственного хорошего решения, которое мы бы хотели исправить.
Проблема заключается в том, что правильный способ сравнения без учета регистра состоит в том, чтобы использовать полное свертывание в Юникоде (http://www.w3.org/International/wiki/Case_folding) вместе с (возможно, для конкретной локали) порядком результирующих символов Юникода. Символы Unicode могут занимать несколько кодовых точек и могут иметь разные представления, поэтому вы, вероятно, также захотите выполнить другие нормализации Unicode.
Так что это ужасно сложно и требует довольно большого стола.
Прекрасно, если у вас уже есть полная библиотека Unicode, и менее здорово, если вы хотите скомпилировать небольшой код JavaScript.
Даже если вы просто используете ASCII, вам все равно придется выяснить, каким должен быть порядок. Есть Z
& lt; ^
? (Как ASCII коды, они есть). Есть ^
& lt; a
? Опять же, как коды ASCII, они есть. Но вы, вероятно, не хотите Z
& lt; a
в сравнении без учета регистра, поэтому для согласованности вам нужно преобразовать в верхний или нижний регистр, и тот, который вы выберете, изменит отношение a
и ^
друг к другу.
Пакет collection
имеет функцию compareAsciiUpperCase (и аналогичную для нижнего регистра), а package:quiver
имеет функцию compareIgnoreCase
, которая просто выполняет toLowerCase()
для обоих аргументов.
Вы можете использовать это как:
import "package:collection/collection.dart";
...
list.sort(compareAsciiUpperCase);