代码之家  ›  专栏  ›  技术社区  ›  Rob Lyndon

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

  •  0
  • Rob Lyndon  · 技术社区  · 6 年前

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

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

    我不担心那些在中国找不到的国家 countryNames.data --我只是把它们从显示的列表中过滤出来。问题是在英语中,

    Å陆地岛屿

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

    有没有一种惯用的方法在Dart中对字符串进行排序,以便更合理地处理特殊字符?

    0 回复  |  直到 6 年前
        1
  •  5
  •   Ovidiu    6 年前

    您必须在常规字符和带变音符号的字符之间创建一个映射,并在比较中使用它,以便出于比较目的将“陆地岛屿”视为“阿拉德群岛”。

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