Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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中的另一个数组一样对数组进行排序#_C#_Arrays - Fatal编程技术网

C# 像C中的另一个数组一样对数组进行排序#

C# 像C中的另一个数组一样对数组进行排序#,c#,arrays,C#,Arrays,采用如下数组的最佳算法是什么: A{0,1,2,3} 我希望像下面的数组一样订购它: B{3,1,0,2} 有什么想法吗?因此,如果有两个数组,它们以不同的顺序保存相同的数据,那么只需执行以下操作: A=B 我怀疑这不是您的情况,因此我认为我们需要更多信息。因此,如果您有两个阵列,并且它们以不同的顺序保存相同的数据,则只需执行以下操作: A=B 我怀疑这不是你的情况,所以我想我们需要更多的信息。在你给出的示例(一组数字)中,重新排序A没有意义,因为你可以只使用B 因此,假设这些是对象的数组,您希

采用如下数组的最佳算法是什么:

A{0,1,2,3}

我希望像下面的数组一样订购它:

B{3,1,0,2}


有什么想法吗?

因此,如果有两个数组,它们以不同的顺序保存相同的数据,那么只需执行以下操作:

A=B


我怀疑这不是您的情况,因此我认为我们需要更多信息。

因此,如果您有两个阵列,并且它们以不同的顺序保存相同的数据,则只需执行以下操作:

A=B

我怀疑这不是你的情况,所以我想我们需要更多的信息。

在你给出的示例(一组数字)中,重新排序A没有意义,因为你可以只使用B

因此,假设这些是对象的数组,您希望按它们的属性之一排序

然后,需要一种基于相关属性(如哈希表)在中查找项目的方法。然后可以迭代B(按所需的顺序),并对A中相应的元素进行操作。

在您给出的示例(一个数字数组)中,对A重新排序没有意义,因为您可以只使用B

因此,假设这些是对象的数组,您希望按它们的属性之一排序


然后,需要一种基于相关属性(如哈希表)在中查找项目的方法。然后可以迭代B(按所需的顺序),并对A中相应的元素进行操作。

两个数组都包含相同的值(或几乎相同),但我需要强制它们的顺序相同。例如,在数组A中,值“3045”位于索引位置4,在数组B中,值“3045”位于索引位置1。我想对B重新排序,使相似值的索引位置与A相同。

两个数组都包含相同的值(或几乎相同),但我需要强制它们的顺序相同。例如,在数组A中,值“3045”位于索引位置4,在数组B中,值“3045”位于索引位置1。我想对B进行重新排序,使相似值的索引位置与A相同。

如果它们几乎相同,那么下面是一些伪代码:

Make an ArrayList
Copy the contents of the smaller array to the arraylist
for each item I in the larger array
    FInd I in the ArrayList
    Append I to a new array
    Remove I from the arraylist
如果它们几乎相同,那么下面是一些伪代码:

Make an ArrayList
Copy the contents of the smaller array to the arraylist
for each item I in the larger array
    FInd I in the ArrayList
    Append I to a new array
    Remove I from the arraylist

您需要做的是确定B的顺序,然后将该顺序应用于A。实现这一点的一种方法是撤销B的顺序,并跟踪沿途发生的情况。然后你可以做A的相反

这里有一些粗略的C#(对不起,我还没有实际运行这个)

复印一份B:

List<int> B2 = new List<int>(B);
List B2=新列表(B);
现在使用记录交换的排序函数对其进行排序:

List<KeyValuePair<int,int>> swaps = new List<KeyValuePair<int,int>>();
B2.Sort( delegate( int x, int y ) {
   if( x<y ) return -1;
   if( x==y ) return 0;
   // x and y must be transposed, so assume they will be:
   swaps.Add( new KeyValuePair<int,int>(x,y) );
   return 1;
});
列表交换=新列表();
B2.排序(委托(整数x,整数y){

如果(x您需要做的是确定B的顺序,然后将该顺序应用于A。实现这一点的一种方法是撤销B的顺序,并跟踪沿途发生的情况。然后您可以对A执行相反的操作

这里有一些粗略的C#(对不起,我还没有实际运行这个)

复印一份B:

List<int> B2 = new List<int>(B);
List B2=新列表(B);
现在使用记录交换的排序函数对其进行排序:

List<KeyValuePair<int,int>> swaps = new List<KeyValuePair<int,int>>();
B2.Sort( delegate( int x, int y ) {
   if( x<y ) return -1;
   if( x==y ) return 0;
   // x and y must be transposed, so assume they will be:
   swaps.Add( new KeyValuePair<int,int>(x,y) );
   return 1;
});
列表交换=新列表();
B2.排序(委托(整数x,整数y){

如果(x问题可以使用字典解决,那么元素之间的关系根本不以排序顺序为基础吗?

问题可以使用字典解决,那么元素之间的关系根本不以排序顺序为基础吗?

这是我的比较器实现(使用LINQ,但可以轻松地适应较旧的.net版本)。您可以将其用于任何排序算法,如Array.Sort、Enumerable.OrderBy、List.Sort等

var data = new[] { 1, 2, 3, 4, 5 };
var customOrder = new[] { 2, 1 };
Array.Sort(data, new CustomOrderComparer<int>(customOrder));
foreach (var v in data)
    Console.Write("{0},", v);

这是我的比较器实现(使用LINQ,但可以很容易地适应较旧的.net版本)。您可以将它用于任何排序算法,如Array.Sort、Enumerable.OrderBy、List.Sort等

var data = new[] { 1, 2, 3, 4, 5 };
var customOrder = new[] { 2, 1 };
Array.Sort(data, new CustomOrderComparer<int>(customOrder));
foreach (var v in data)
    Console.Write("{0},", v);

请不要用答案来澄清你的问题,请编辑你的原始问题以包含附加信息。因为答案是按投票排序的,这意味着你的澄清将始终位于底部。这也意味着你因澄清你的答案而名声不佳。请不要用答案来澄清你的问题,请编辑您的原始问题需要包含附加信息。因为答案是按投票排序的,这意味着您的澄清将始终位于底部。这也意味着您在澄清您的答案方面获得了声誉,这并不好。您能说A中的所有元素是否都存在于B中吗?我想,如果某些元素不存在于A中,这并不重要相反的可能性会产生一些类似于未定义的结果——尽管你可以让它们落到最后。你能说A中的所有元素是否都存在于B中吗?我想如果某些元素不存在于A中也没关系。相反的可能性会产生类似于未定义的结果——尽管你可以让它们落到最后。我像这样。这是一个职位分析。可能在资源方面很昂贵(mem和proc)。我喜欢这个。这是一个职位分析。可能在资源方面很昂贵(mem和proc)。Upboat用于(uint)IndexOf()比较。Upboat用于(uint)IndexOf()比较。