Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按值获取字节的顺序_C#_Algorithm - Fatal编程技术网

C# 按值获取字节的顺序

C# 按值获取字节的顺序,c#,algorithm,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 如前所述,这不处理重复项

我现在有一个有趣的思想问题,也许你们中的某个人可以帮我

基本上,我拥有的是一个字节数组,需要知道数组中每个单独项的顺序——按值排列。哦,伙计,我只给你举个小例子,我认为这会更好:

byte[] array = new byte[4] { 42, 5, 17, 39 }
我想得到这个结果

4 1 2 3
做这件事的明智方法是什么

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

new byte[4] { 22, 33, 33, 11 }
应该导致

2 3 4 1
如前所述,这不处理重复项

您可以使用:

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);

sorted
应该是IEnumerable或var。OrderBy不会从我这里返回数组。+1@Daniel A.White:如果项目不是唯一的,这将起作用:“此方法执行稳定排序;即,如果两个元素的键相等,则元素的顺序将保留。”()@Andrew:但IndexOf在重复项上失败。即使对于唯一的值,它的伸缩性也非常差,由于查找的原因。@Henk:True-虽然我假设他不是在手动输入数据时这样做;)是的,它忽略了索引的+1,但除此之外,它工作得很好:)我将在我的控制台应用程序中测试它,并在测试足够后给你标记的答案@Daniel-元素仍然没有以正确的顺序发出。我同意Daniel的观点,一旦将+1添加到索引中,结果将是正确的。那么,您如何将
结果
与原始数组关联呢?
results
的第一个元素应该是
42
@Reed的位置不幸的是,它不起作用:2,2,1,3应该导致1,2,0,3,但会导致2,0,1,3,这不就是用输入数组作为键对数组[1,2,3,4]进行排序吗?只是一个很好的旧数组。排序(一到n,输入数组)编辑:不管怎样,它不是
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);