You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何正确排序含匈牙利重音字符的字符串列表

匈牙利语字符串排序异常解决方案

问题原因

默认的字符串compareTo方法基于Unicode码点值进行比较,匈牙利语特殊重音字符(如Á、É、Ő等)的Unicode编码排在基础拉丁字母A-Z之后,例如Á的Unicode码为U+00C1,远大于B的U+0042,因此默认排序会出现Áa排在Bb之后的不符合本地规则的结果。

Dart语言实现方案(你提供的示例为Dart语法)

使用官方intl包提供的本地化比较器Collator,指定匈牙利语区域即可实现符合规则的排序:

  1. 首先在pubspec.yaml中添加依赖:
dependencies:
  intl: ^0.18.1 # 可替换为最新稳定版本
  1. 排序代码示例:
import 'package:intl/intl.dart';

void main() {
  final textList = ["Bb", "Aa", "Áa"];
  // 初始化匈牙利语排序规则比较器
  final hungarianCollator = Collator(locale: 'hu');
  // 使用自定义比较器排序
  textList.sort(hungarianCollator.compare);
  print(textList); // 输出符合预期:[Aa, Áa, Bb]
}

其他常见语言的实现思路

  • JavaScript:使用内置Intl.Collator指定匈牙利语区域
const textList = ["Bb", "Aa", "Áa"];
textList.sort(new Intl.Collator('hu').compare);
  • Java:使用java.text.Collator绑定匈牙利本地化配置
import java.text.Collator;
import java.util.Arrays;
import java.util.Locale;

public class HungarianSort {
    public static void main(String[] args) {
        String[] textList = {"Bb", "Aa", "Áa"};
        Collator huCollator = Collator.getInstance(new Locale("hu", "HU"));
        Arrays.sort(textList, huCollator);
    }
}
  • Python:通过locale模块加载匈牙利语排序规则
import locale
from functools import cmp_to_key

locale.setlocale(locale.LC_COLLATE, 'hu_HU.UTF-8')
text_list = ["Bb", "Aa", "Áa"]
text_list.sort(key=cmp_to_key(locale.strcoll))

内容的提问来源于stack exchange,提问作者Péter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:01