Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

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_Tlist - Fatal编程技术网

列表中的复合排序<;字符串>;C#

列表中的复合排序<;字符串>;C#,c#,sorting,tlist,C#,Sorting,Tlist,朋友们,我有这样一个清单: var filenames = new List<string> { "150_A_1_A", "150_A_1", "149_2", "149_1", "150_1_A", "150_A_2", "150_2_A" }; 有什么想法吗?谢谢文件名.Sort()完全符合您的要求 如果希望延迟执行,可以执行以下操作: filenames.OrderBy(s=>s)她的LI

朋友们,我有这样一个清单:

var filenames = new List<string> 
{ 
    "150_A_1_A", 
    "150_A_1",  
    "149_2",  
    "149_1",  
    "150_1_A",  
    "150_A_2",  
    "150_2_A"  
};
有什么想法吗?谢谢

文件名.Sort()完全符合您的要求

如果希望延迟执行,可以执行以下操作:
filenames.OrderBy(s=>s)

她的LINQ表达式可以满足您的需要:

var x = filenames.Select(s => new { value = s, splitted = s.Split('_') }).OrderBy(s => int.Parse(s.splitted[0]));

for (int i = 1; i < x.Max(s => s.splitted.Length); i++)
{
    var thisI = i;
    x = x.ThenBy(s => thisI >= s.splitted.Length ? null : s.splitted[thisI]);
}

var sorted = x.Select(s => s.value);
var x=filenames.Select(s=>new{value=s,splitted=s.Split('''')).OrderBy(s=>int.Parse(s.splitted[0]);
对于(inti=1;is.splitted.Length);i++)
{
var thisI=i;
x=x.ThenBy(s=>thisI>=s.splitted.Length?null:s.splitted[thisI]);
}
var sorted=x.Select(s=>s.value);
首先,我用“\u1”分割字符串

然后我对第一个字段进行数字排序


最后,我使用
.sort()
方法按字母顺序对所有剩余字段进行排序,这里已经回答了以下问题:
150\u A\u 2
项目将按此顺序排列?还是项目
150\u 10\u A
?(我猜你的例子并不是问题的全部代表。)在你的例子中:60_1将在100_1之前出现。。。对吗?@ChrisEelmaa解释为什么不是他想要的?输出与他的示例输出完全匹配。在我投票否决之前,我尝试了filenames.Sort()。它给了我“150_A_2”作为最后一项,但这不是OP想要的吗?@ChrisEelmaa一个人会认为这是他的输出中的一个缺陷,除非我们相信有一个名为
的算法。SortExceptWhereElementEquals150_A_2()
仍然是一个不完整的问题不能真正得到答案。要点,删除向下投票。
var x = filenames.Select(s => new { value = s, splitted = s.Split('_') }).OrderBy(s => int.Parse(s.splitted[0]));

for (int i = 1; i < x.Max(s => s.splitted.Length); i++)
{
    var thisI = i;
    x = x.ThenBy(s => thisI >= s.splitted.Length ? null : s.splitted[thisI]);
}

var sorted = x.Select(s => s.value);