Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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#_Arrays_Linq_Sorting_Byte - Fatal编程技术网

C# 字节列表或字节数组列表的排序列表

C# 字节列表或字节数组列表的排序列表,c#,arrays,linq,sorting,byte,C#,Arrays,Linq,Sorting,Byte,LINQ在ThenBy等方面有很好的OrderBy功能,但是我如何才能在列表上按第1列排序,然后按第2列排序,依此类推 字节列表: [0]={0,1,2,3,4} [1] = {0, 0, 2, 4, 1} [2] = {1, 2, 2, 1, 1} [3] = {1, 0, 2, 2, 2} 实际上,我在创建字符串[]时也做了同样的事情,但将字节转换为字符串,然后再转换回来是很混乱的,并且由于某种原因,结果有所不同 我想得到: [0]={0,0,2,4,1} [1] = {0, 1, 2,

LINQ在ThenBy等方面有很好的OrderBy功能,但是我如何才能在
列表上按第1列排序,然后按第2列排序,依此类推

字节列表:

[0]={0,1,2,3,4}
[1] = {0, 0, 2, 4, 1}
[2] = {1, 2, 2, 1, 1}
[3] = {1, 0, 2, 2, 2}
实际上,我在创建字符串[]时也做了同样的事情,但将字节转换为字符串,然后再转换回来是很混乱的,并且由于某种原因,结果有所不同

我想得到:

[0]={0,0,2,4,1}
[1] = {0, 1, 2, 3, 4}
[2] = {1, 0, 2, 2, 2}
[3] = {1, 2, 2, 1, 1}

是否可以使用一些LINQ或任何其他已制作的库来执行此操作,或者是否有任何手动制作的建议?

您可以从实现
IComparer
开始。例如(为了简洁起见,省略空处理):


这种方法也会奏效。但是@Joe表现出了更好的表现

public static void Main()
{
    List<List<Byte>> bytes = new List<List<Byte>>(){
                                        new List<Byte> {0, 1, 2, 3, 4},
                                        new List<Byte> {0, 0, 2, 4, 1},
                                        new List<Byte> {1, 2, 2, 1, 1},
                                        new List<Byte> {1, 0, 2, 2, 2}
                                };

    var result = bytes.OrderBy(x => String.Join(String.Empty, x));

    foreach (var list in result)
    {
        foreach (var bit in list)
            Console.Write(bit);

        Console.WriteLine();
    }   
}
publicstaticvoidmain()
{
列表字节=新列表(){
新列表{0,1,2,3,4},
新列表{0,0,2,4,1},
新列表{1,2,2,1,1},
新列表{1,0,2,2,2}
};
var result=bytes.OrderBy(x=>String.Join(String.Empty,x));
foreach(结果中的var列表)
{
foreach(列表中的变量位)
控制台写入(位);
Console.WriteLine();
}   
}

顺便说一句,在有标记的答案中有这样一行

for(int index = 0; index < Math.Min(x.Count, y.Count); index++)
将被调用的次数与迭代持续的次数相同

一定是

int min=Math.Min(x.Count, y.Count);
for(int index = 0; index < min; index++)
int min=Math.min(x.Count,y.Count);
对于(int-index=0;index
当然可以,但它会转换为字符串,我不想这样做:)IComparer非常适合我,这是Joe建议的:非常感谢。这非常有效,现在我只想找到一件事。第一个列表是原始字节序列,排序后它位于列表中的某个位置。我是否应该浏览所有列表并检查它们是否匹配,或者是否有更好的理由这样做,因为有时候列表可能是相等的?@GrandaS-如果我理解您的要求,您可以在排序之前存储对第一个列表的引用。然后浏览列表,寻找匹配项。如果您特别想要第一个列表,即使有重复项,也可以使用ReferenceEquals。或者你可以使用ByteListComparer找到第一个匹配项。是的,我相信引用和引用等于我想要的。非常感谢,我去试试这个:)
for(int index = 0; index < Math.Min(x.Count, y.Count); index++)
Math.Min(x.Count, y.Count)
int min=Math.Min(x.Count, y.Count);
for(int index = 0; index < min; index++)