背景
在对列表里的字符串进行排序时,当存在有自然数时,想要让之以自然数顺序进行排序,然而默认的排序是不支持自然数排序的,需要自己实现。
排序方式对比如下:
Alphabetic sort | Natural numeric sort |
---|---|
DOS (CMD prompt) style | Windows Explorer Style |
1.txt | 1.txt |
10.txt | 3.txt |
3.txt | 10.txt |
a10b1.txt | a1b1.txt |
a1b1.txt | a2b1.txt |
a2b1.txt | a2b2.txt |
a2b11.txt | a2b11.txt |
a2b2.txt | a10b1.txt |
b1.txt | b1.txt |
b10.txt | b2.txt |
b2.txt | b10.txt |
实现
.NET平台
在.NET平台下,可以使用《Numeric String Sort in C#》文章里提供的方法。
Unity平台
在编辑器下,可以使用EditorUtility.NaturalCompare
接口,运行时的话,只能使用.NET平台的方法。
测试
测试代码如下:
private void Test()
{
List<string> names = new List<string>();
names.Add("1.txt");
names.Add("a10b1.txt");
names.Add("a1b1.txt");
names.Add("10.txt");
names.Add("3.txt");
names.Sort();
foreach (var n in names)
{
Debug.Log(n);
}
names.Sort(EditorUtility.NaturalCompare);
foreach (var n in names)
{
Debug.Log(n);
}
}
运行结果前后对比如下: