Dart:带有特殊字符的排序列表

Rob*_*don 6 dart flutter

我想按本地化的国家/地区名称对 Dart 中的国家/地区列表进行排序。这就是我的做法:

final countryNames = CountryNames.of(context);
_countries.sort((a, b) => 
  (countryNames.data[a.isoCode.toUpperCase()] ?? "").compareTo(
    countryNames.data[b.isoCode.toUpperCase()] ?? ""));
Run Code Online (Sandbox Code Playgroud)

我不担心未在其中找到的国家/地区countryNames.data- 我只是从显示的列表中过滤掉这些国家/地区。问题是,在英语中,

奥兰群岛

出现在前向排序列表的底部,而在法语和其他特殊字符泛滥的语言中,情况更糟。

是否有一种惯用的方式在 Dart 中对字符串进行排序,以便更合乎逻辑地处理特殊字符?

Ovi*_*diu 5

您必须在常规字符和带变音符号的字符之间创建映射,并在比较中使用它,以便将“奥兰群岛”视为“奥兰群岛”以进行比较。

看起来其他人已经这样做了并将其作为包发布:https : //pub.dev/packages/diacritic

  • 完美解决方案!甚至不知道排序时需要担心的事情,直到看到排序未正确排序 lmao (2认同)