按值获取字节顺序

时间:2011-09-19 17:05:01

标签: c# algorithm

我现在有一个有趣的思考问题,所以也许有人可以提供帮助。

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

byte[] array = new byte[4] { 42, 5, 17, 39 }

我希望得到这个结果

4 1 2 3

这样做的智能方法是什么?

此外,如果条目值相等,我希望算法保留顺序。所以

new byte[4] { 22, 33, 33, 11 }

应该导致

2 3 4 1

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

byte[] array = new byte[4] { 42, 5, 17, 39 }
var sorted = array.OrderBy(x=> x);

var result = from b in sorted 
    select (x => array.IndexOf(x) + 1);

如上所述,这不会处理重复项。