我现在有一个有趣的思考问题,所以也许有人可以提供帮助。
基本上我拥有的是一个字节数组,需要知道该数组中每个项目的顺序 - 按值。哦,伙计,我只会告诉你一个小例子,我认为这会有所帮助:
byte[] array = new byte[4] { 42, 5, 17, 39 }
我希望得到这个结果
4 1 2 3
这样做的智能方法是什么?
此外,如果条目值相等,我希望算法保留顺序。所以
new byte[4] { 22, 33, 33, 11 }
应该导致
2 3 4 1
答案 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);
如上所述,这不会处理重复项。