排序字节列表或字节数组列表

Gra*_*daS 4 c# linq arrays sorting byte

LINQ在ThenBy等方面具有很好的OrderBy功能,但是我怎样才能使这个工作List<List<byte>>按第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}
Run Code Online (Sandbox Code Playgroud)

实际上,当我创建string []时,我做了同样的事情,但是将字节转换为字符串然后返回是混乱的,结果因某些原因而有所不同.

我想得到:

[0] = {0, 0, 2, 4, 1}
[1] = {0, 1, 2, 3, 4}
[2] = {1, 0, 2, 2, 2}
[3] = {1, 2, 2, 1, 1}
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*Joe 10

你可以从实施一个开始IComparer<IList<byte>>.例如(为简洁省略空处理):

public class ByteListComparer : IComparer<IList<byte>>
{
    public int Compare(IList<byte> x, IList<byte> y)
    {
        int result;
        for(int index = 0; index<Min(x.Count, y.Count); index++)
        {
            result = x[index].CompareTo(y[index]);
            if (result != 0) return result;
        }
        return x.Count.CompareTo(y.Count);
    }
}
Run Code Online (Sandbox Code Playgroud)

以上是未经测试的(甚至没有编译),但应该足以让你入门.

然后,您可以OrderBy在主列表中使用,传入此比较器的实例:

input.OrderBy(x => x, new ByteListComparer())
Run Code Online (Sandbox Code Playgroud)