c#字节数组排序它's旋转
本文关键字:旋转 字节 数组排序 | 更新日期: 2023-09-27 17:50:33
我有一个字节数组,例如byte[] = new byte[3] { 97, 98, 99, 99, 96 }
在实际情况下字节数组要长得多。
我如何获得这个数组的所有旋转并对其排序?我还需要在排序列表中保持原始索引
旋转应该像:
{ 97, 98, 99, 99, 96 },
{ 98, 99, 99, 96, 97 },
{ 99, 99, 96, 97, 98 },
{ 99, 96, 97, 98, 99 },
{ 96, 97, 98, 99, 99 }
然后我需要排序得到:
{ 96, 97, 98, 99, 99 },
{ 97, 98, 99, 99, 96 }, // <- index in rotated list/array
{ 98, 99, 99, 96, 97 },
{ 99, 96, 97, 98, 99 },
{ 99, 99, 96, 97, 98 }
我使用不有效的方式将byte[]转换为字符串,然后创建字符串数组,每个数组元素保持它的旋转,之后排序字符串数组。我还使用了内置函数"sort",所以我无法捕获我的索引。也许用LINQ或类似的东西可以做到这一点?
您可以扩展数组并在那里进行排序。您需要创建自己的排序机制:
public static int[] SortAndReturnIndexes(this byte[])
{
var indexArray = new int[];
// Your sort logic goes here
return indexArray;
}
根据您在完成这些操作后想要对它做什么,物理地生成结果可能不是最好的方法。以下面的类为例:
public class Rotation[T] {
private int init;
private T[] src;
public Rotation(T[] src, init){
this.init = init;
this.src = src;
}
public T this[int i] { //indexer
get {
int realindex = (i + init) % src.Length; //rotate the index
return src[realindex];
}
}
}
你可以用
byte[] src = new byte[5] { 97, 98, 99, 99, 96 }
//rotate by 2
Rotation[byte] rotation = new Rotation(src, 2);
rotation[0] == 99
要对它进行排序,最好创建一个自定义IComparer,您可以将其提供给排序方法:https://msdn.microsoft.com/en-us/library/8ehhxeaf%28v=vs.110%29.aspx