Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找在当前区域性中所有字母之后排序的字符串的最佳方法_C#_Sorting_Culture - Fatal编程技术网

C# 查找在当前区域性中所有字母之后排序的字符串的最佳方法

C# 查找在当前区域性中所有字母之后排序的字符串的最佳方法,c#,sorting,culture,C#,Sorting,Culture,在C#中,我希望在当前区域性中有一个按字母顺序排序的名称列表(不区分大小写),并有一个“假名称”,自动在列表末尾排序 如果排序使用的是ASCII,我们可以使用“{”,因为这是在“z”之后,所以它总是在“z”之后进行排序。但是,这通常不适用于基于区域性的排序 现在我用的是“zzzzzzz”,它适用于英语,但我知道这不是正确的答案——有没有好的方法 (我知道一种选择是在排序后将其结束-不幸的是,在这种情况下这并不简单) 您可以考虑将您的名称字符串封装在可以提供一些元数据的类型中,例如: public

在C#中,我希望在当前区域性中有一个按字母顺序排序的名称列表(不区分大小写),并有一个“假名称”,自动在列表末尾排序

如果排序使用的是ASCII,我们可以使用“{”,因为这是在“z”之后,所以它总是在“z”之后进行排序。但是,这通常不适用于基于区域性的排序

现在我用的是“zzzzzzz”,它适用于英语,但我知道这不是正确的答案——有没有好的方法

(我知道一种选择是在排序后将其结束-不幸的是,在这种情况下这并不简单)


您可以考虑将您的名称字符串封装在可以提供一些元数据的类型中,例如:

public class SortableName
{
    public string Name { get; set; }
    public bool IsFakeName { get; set; }
}
var names = new List<SortableName> { new SortableName { Name = "Test" }};
var sortedNames = names.OrderBy(n => n.IsFakeName)
                       .ThenBy(n => n.Name.ToLower()); //Case insensitivity
您可以扩展此类型,并使用LINQ根据业务逻辑对集合进行排序,例如:

public class SortableName
{
    public string Name { get; set; }
    public bool IsFakeName { get; set; }
}
var names = new List<SortableName> { new SortableName { Name = "Test" }};
var sortedNames = names.OrderBy(n => n.IsFakeName)
                       .ThenBy(n => n.Name.ToLower()); //Case insensitivity

如果我没有错的话,utf-16中的最后一个字符是
U+10FFFD
U+10FFFE
U+10FFFF
似乎是保留的) 因此,您可以这样做以获得一个字符串,我认为它将始终是排序中的最后一个:

string fakeName= char.ConvertFromUtf32(0x10FFFD);

你能举一个例子说明使用
{
不起作用吗?你能给我们一些输入和输出的例子吗?编辑后给出一个例子说明{在列表的前面。假设你的意思是U+10FFFE和U+10FFFF是保留的-有意思,我会试试看。