问题:
假设我们有以下字符串列表{"Test1.txt", "Test2.txt", "Test11.txt", "Test22.txt"},使用String::compareToor对它们Collator::compare进行排序将产生以下顺序:
Test1.txt
Test2.txt
Test22.txt
Test3.txt
Run Code Online (Sandbox Code Playgroud)
这很不方便(可以说),而更人性化的结果是:
Test1.txt
Test2.txt
Test3.txt
Test22.txt
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我们可以编写自己的数字敏感的比较方法。但是,如果我们想要数字敏感排序以及使用现有实现Collator(或避免实现)进行国际化的好处,该怎么办?
有没有正确的方法来处理这个问题?或者也许有一个可靠的库可以解决这个问题?
其他语言:
在 Javascript 世界中,Intl.Collator的构造函数接受 a CollatorOption,它允许您设置配置来实现此类功能及更多功能:
const usCollator = Intl.Collator("us", { numeric: true });
const list = ["Test1.txt", "Test2.txt", "Test3.txt", "Test22.txt"];
list.sort(usCollator.compare);
console.log(list);
Run Code Online (Sandbox Code Playgroud) 我在任何地方都找不到使用collator.compare排序对象的任何示例。有人可以提供吗?到目前为止,我遇到的所有文档和示例都涉及到show array sorting,如下所示:
var myArray = ['1_Document', '11_Document', '2_Document'];
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
myArray.sort(collator.compare)
Run Code Online (Sandbox Code Playgroud)
很高兴看到它如何对像
var objs = [{name: '1_Document', size: 40}, {name: '11_Document', size: 50}, {name: '2_Document', size: 60}];
Run Code Online (Sandbox Code Playgroud) (我使用Java)
我想使用 Collator 按属性对对象子列表进行排序,以便按字母顺序排序但忽略重音符号。问题是我尝试了不同的方法,但没有任何效果。
这会对子列表进行排序,但不会忽略重音符号:
newList.subList(0, 5).sort(Comparator.comparing(element -> element.getValue()));
Run Code Online (Sandbox Code Playgroud)
这是我想使用的整理器:
Collator spCollator = Collator.getInstance(new Locale("es", "ES"));
Run Code Online (Sandbox Code Playgroud)
我希望输出是一个按属性按字母顺序排序的子列表,您可以使用 .getValue() 访问该属性,忽略重音符号。