我现在有一个有趣的思考问题,所以也许你们中的某个人可以提供帮助.
基本上我所拥有的是一个字节数组,需要知道该数组中每个项目的顺序 - 按值.哦,伙计,我只会告诉你一个小例子,我认为这会有所帮助:
byte[] array = new byte[4] { 42, 5, 17, 39 }
Run Code Online (Sandbox Code Playgroud)
我希望得到这个结果
4 1 2 3
Run Code Online (Sandbox Code Playgroud)
什么是聪明的方法来做到这一点?
此外,如果条目的值相等,我希望算法保留顺序.所以
new byte[4] { 22, 33, 33, 11 }
Run Code Online (Sandbox Code Playgroud)
应该导致
2 3 4 1
Run Code Online (Sandbox Code Playgroud)
您可以使用:
byte[] byteArray = new byte[4] { 42, 5, 17, 39 };
var results = byteArray.Select((b, i) => new { Value = b, Index = i})
.OrderBy(p => p.Value)
.Select((p, i) => new { Index = p.Index, SortedPosition = i + 1 })
.OrderBy(p => p.Index)
.Select(p => p.SortedPosition);
Run Code Online (Sandbox Code Playgroud)