按值获取字节顺序

Urb*_*Esc 5 c# algorithm

我现在有一个有趣的思考问题,所以也许你们中的某个人可以提供帮助.

基本上我所拥有的是一个字节数组,需要知道该数组中每个项目的顺序 - 按值.哦,伙计,我只会告诉你一个小例子,我认为这会有所帮助:

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)

Ree*_*sey 6

您可以使用:

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)

  • 这个例子返回`1,2,3,0` - 错误 (2认同)