最近一个朋友在找工作,偶尔问些关于C#的笔试题,其中有一个是关于去除一个数组中的重复数问题:如定义一个int型数组:
int[] testNum={1,1,3,5,6,3,6,9};
要求写一个函数得到如下数据[1,3,5,6,9],即重复出现的数只保存第一次出现的那一个数据,本来很简单的一个问题,但是不留心还是会遇到些小麻烦,在这里主要采用array,hashtable以及arraylist几个东西的用法吧:
开始只想到用array,后来才发现array分配的内存是连续的。故没有remove(at)、add等属性,需要重新构造一个数组,写出来貌似比较麻烦
private int[] DuplicatiNum(int[] intArray)
{
int[] retArray = new int[intArray.Length];
Hashtable hshArray = new Hashtable();
int intIndex = 0;
foreach (int p in intArray)
{
if (!hshArray.ContainsKey(p))
{
hshArray.Add(p, p);
retArray[intIndex] = p;
intIndex++;
}
}
int[] arrReturn = new int[intIndex];
for (int i = 0; i < intIndex; i++)
{
arrReturn[i] = retArray[i];
}
hshArray.Clear();
hshArray = null;
return arrReturn;
}
后来发现用arraylist处理方便多了:
private int[] UsingArrayList(int[] intArray)
{
ArrayList arrInt = new ArrayList();
Hashtable hshArray = new Hashtable();
foreach (int p in intArray)
{
if (!hshArray.ContainsKey(p))
{
hshArray.Add(p, p);
arrInt.Add(p);
}
}
hshArray.Clear();
hshArray = null;
return (int[])arrInt.ToArray(typeof(int));
}
在新建的aspx页面里面测试通过,留个纪念吧,也算是加深下对array,arraylist和hashtable的理解吧
protected void Page_Load(object sender, EventArgs e)
{
int[] testNum={1,1,3,5,6,3,6,9};
int[] testDuplicate = DuplicatiNum(testNum);
int[] testArrayList = UsingArrayList(testNum);
}
浙公网安备 33010602011771号