心灵的沉淀......

记录点滴心路历程,不断成长
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于一个去除重复数组的问题

Posted on 2009-10-09 14:41  lucio  阅读(556)  评论(0)    收藏  举报
 

 

 

最近一个朋友在找工作,偶尔问些关于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);

    }