如何使用变音符号对列表进行排序?\ncompareTo-Function 会忽略这些并将单词放在列表的末尾。
\n\nmain() {\n var fruits = ['\xc3\x84pfel', 'Bananen', 'Orangen'];\n fruits.sort((a, b) => a.compareTo(b));\n}\nRun Code Online (Sandbox Code Playgroud)\n
有一个名为diacritic的包 可以让这一切变得简单。
\nhttps://pub.dev/packages/diacritic
\n只需将依赖项放入 pubspec.yml 并使用它即可。
\ndependencies:\n diacritic: ^0.1.1\nRun Code Online (Sandbox Code Playgroud)\n导入它:
\nimport \'package:diacritic/diacritic.dart\';\nRun Code Online (Sandbox Code Playgroud)\n并使用它:
\nvar fruits = [\'\xc3\x84pfel\', \'Bananen\', \'Orangen\'];\nfruits.sort((a, b) => removeDiacritics(a).compareTo(removeDiacritics(b)));\nprint(fruits);\nRun Code Online (Sandbox Code Playgroud)\n输出将是:
\n[\xc3\x84pfel, Bananen, Orangen]\nRun Code Online (Sandbox Code Playgroud)\n
我根据@DanielJunglas 的想法创建了自定义比较器。\n他的代码对于波兰语来说不能正常工作,我认为它对于德语也不好。它适用于波兰语,但可以用于任何语言,您只需将地图中的字母更改为您的字母表即可。它忽略所有其他非字母符号。例如,如果您希望也有“+”号进行比较,并在每个其他字母之前都有它,只需将其添加到数字最小的映射表中即可。如果有人有更简单的方法请告诉我。我也是初学者。
\n\nmain() {\n\nvar sample = [\'\xc3\x93nda\', \'Orangen\', \'\xc4\x84pfel\', \'Okren\', \'\xc5\xbcarcik\', \'Banen\', \'Alpa\', \'\xc5\x82\xc4\x85ka\', \'\xc5\xbarebak\'];\n\nPolishLettersCompare cmp = new PolishLettersCompare();\n sample.sort(\n (a, b) => cmp.compare(a, b)\n );\n}\n\nclass PolishLettersCompare {\nfinal Map<String, int> map = {\n"A": 1,\n"a": 2,\n"\xc4\x84": 3,\n"\xc4\x85": 4,\n"B": 5,\n"b": 6,\n"C": 7,\n"c": 8,\n"\xc4\x86": 9,\n"\xc4\x87": 10,\n"D": 11,\n"d": 12,\n"E": 13,\n"e": 14,\n"\xc4\x98": 15,\n"\xc4\x99": 16,\n"F": 17,\n"f": 18,\n"G": 19,\n"g": 20,\n"H": 21,\n"h": 22,\n"I": 23,\n"i": 24,\n"J": 25,\n"j": 26,\n"K": 27,\n"k": 28,\n"L": 29,\n"l": 30,\n"\xc5\x81": 31,\n"\xc5\x82": 32,\n"M": 33,\n"m": 34,\n"N": 35,\n"n": 36,\n"\xc5\x83": 37,\n"\xc5\x84": 38,\n"O": 39,\n"o": 40,\n"\xc3\x93": 41,\n"\xc3\xb3": 42,\n"P": 43,\n"p": 44,\n"R": 45,\n"r": 46,\n"S": 47,\n"s": 48,\n"\xc5\x9a": 49,\n"\xc5\x9b": 50,\n"T": 51,\n"t": 52,\n"U": 53,\n"u": 54,\n"V": 55,\n"v": 56,\n"W": 57,\n"w": 58,\n"X": 59,\n"x": 60,\n"Y": 61,\n"y": 62,\n"Z": 63,\n"z": 64,\n"\xc5\xbb": 65,\n"\xc5\xbc": 66,\n"\xc5\xb9": 67,\n"\xc5\xba": 68,\n};\nint charAint;\nint charBint;\nint compare(String a, String b) {\nint min = a.length;\nif (b.length < a.length) min = b.length;\nfor (int i = 0; i < min; ++i) {\n String charA = a[i];\n String charB = b[i];\n if (map.containsKey(charA)) {\n charAint = map[charA];\n }\n if (map.containsKey(charB)) {\n charBint = map[charB];\n }\n if (charAint > charBint)\n return 1;\n else if (charAint < charBint) return -1;\n}\nif (a.length < b.length)\n return -1;\nelse if (a.length > b.length) return 1;\nreturn 0;\n}\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |