我现在有两个数组A{2,1,5,4,3}和B{a,b,c,d,e},两个数组元素是一一对应的,当数组A排序后变为{1,2,3,4,5},数组B也变为{b,a,e,d,c}.也就是说,当一个数组改变顺序时,另一个对应的数组也跟着变化!
请问如何实现类似的关联???
请问如何实现类似的关联???
解决方案 »
- c# 安装怎么把.msi文件去掉出错
- 请教关于CuteEditor控件的问题
- 如何读取进程SessionID对应的计算机名
- C#判断输入是否为数字
- 问一下各位面试带的什么作品??
- 求一个XML与C# Windows程序的解决方法。
- 我靠,搜索了很多接口的帖子,就没有一个人能解释到点子上,我靠,为什么要用接口啊,用一般类不是也可以?实在是晕..
- 高分求教:c# socket 异步单线程SOCKET SERVER
- 关于activex控件mscomm32.ocx许可证的问题
- 向高手求教,c#与outlook的问题!!!
- LINQ与NHIBERNATE
- 一个反射的问题!在Winform下可以,在asp.net下有问题.
也就是A的排序和B的排序同步进行
hashtable hash = new HashTable();
hash.Add("2", "a");
..........
//排序
arr2[i] = hash[arr1[i]]
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); int[] A = new int[] { 2, 1, 5, 4, 3 };
Char[] B = new Char[] { 'a', 'b', 'c', 'd', 'e' }; for (int i = 0; i < A.Length - 1; i++)
for (int j = i + 1; j < B.Length; j++)
if (A[i] > A[j])
{
int TA = A[i];
A[i] = A[j];
A[j] = TA;
Char TB = B[i];
B[i] = B[j];
B[j] = TB;
}
String S = "{";
foreach (int a in A)
S += a.ToString() + " ";
S += "} {";
foreach (Char b in B)
S += b.ToString() + " ";
S += "}";
MessageBox.Show(S);
}
}
}
string[] B = new string[] {"a","b","c","d","e"};
Array.Sort(A, B);
for (int i = 0; i < A.Length; i++)
{
Console.WriteLine("{0} --> {1}", A[i], B[i]);
}
Console.ReadLine();
1 --> b
2 --> a
3 --> e
4 --> d
5 --> c下标是否越界等细节问题楼主自己考虑
b=1,c=5,d=4,e=3;
然后排序
就搞定.
int[] a = { 2, 1, 5, 4, 3 };
string[] b = { "a", "b", "c", "d", "e" };
Dictionary<string, int> dic = new Dictionary<string, int>();
for (int i = 0; i < a.Length; i++)
dic.Add(b[i], a[i]);//将a与b的关系存入dic
Array.Sort(a);//将a排序
Array.Sort(b, new Comparison<string>(delegate(string first, string second)//对b排序
{
int indexa = Array.IndexOf(a, dic[first]);
int indexb = Array.IndexOf(a, dic[second]);
return indexa - indexb;
}));
foreach (int i in a)
Console.Write(i + " ");
Console.WriteLine();
foreach (string s in b)
Console.Write(s + " ");
/*
输出结果:
1 2 3 4 5
b a e d c
*/
那就建一个辅助数组,里面记录a在排序后的下标。
访问b的时候,按照辅助数组里面指定的下标访问就好了。
最近语无伦次,语言表达能力极差。还是看代码吧。
仿照8楼的方法。 int[] a = new int[] { 3, 2, 1, 4, 5 };
string[] b = new string[] { "c", "b", "a", "d", "e" }; int[] indecies = new int[a.Length];
for (int i = 0; i != indecies.Length; i++) {
indecies[i] = i;
}
Array.Sort(a, indecies);