一个数组,删除其中相同的元素(保留一个),比如一个数组:
string[] str_arr = { "A","A","A","B","C","C","D", ...(此处略去几万个元素) };
// 处理后的结果是:
str_arr = {"A","B","C","D",...(此处略去几万元素)};
一个个循环比较的笨办法我倒是知道,但是有几万个元素啊,还有没有更好的办法呢?(顺序不限,实现语言不限,最好是C#的),哪位仁兄能帮帮忙呢?

解决方案 »

  1.   

    var q=arr.Distinct().Orderby(a=>a);
    或IEqualityComparer
      

  2.   

    string[] arr = new string[]{"aa","bb","bb,"cc"};
    List<string> list = new List<string>();
    foreach(string s in arr)
    {
        if(list.Contains(s)) continue;
        list.Add(s);
    }
      

  3.   

             
    List<string> listString = new List<string>();            
    Array.Sort(stringArray);//排序数组            
    int MaxLine = stringArray.Length;            
    #region 单独计算第一个            
    if (sourceData[0] != stringArray[1])            
    {                
        listString.Add(stringArray[0]);            
    }            
    #endregion            
    for (int i = 1; i < MaxLine; i++)            
    {                
        if (sourceData[i] != stringArray[i-1])                
        {                    
            listString.Add(stringArray[i]);                
        }            
    }思路是:首先对数组进行排序,这样相同的数组就排列在了一起。然后遍历原数组,一次取出当前元素和上一个元素,如果2个元素相等就跳过,不相等就将其元素的保存到泛型listString中。(第一次运行的时候,前一个元素为空,所以把第一个元素单独拿出来处理)
      

  4.   

    3.5的话,直接 str_arr.Distinct();[align=center]*****************************
    * 本内容使用CSDN 小秘书回复 *
    每天回帖即可得10分可用分! *
    *****************************[/align]
      

  5.   

    楼上真是速度~![align=center]*****************************
    * 本内容使用CSDN 小秘书回复 *
    每天回帖即可得10分可用分! *
    *****************************[/align]
      

  6.   

    几万个的话,可以考虑使用哈希算法,比起普通的比较速度快很多,而内置的哈希算法类就有个Dictionary类,使用方法很简单。
    方法一:            string[] str_arr = { "A", "A", "A", "B", "C", "C", "D", };
                Dictionary<string, object> tmp = new Dictionary<string, object>();
                for(int i = 0;i<str_arr.Length;i++)
                {
                    try
                    {
                        tmp.Add(str_arr[i], null);
                    }
                    catch { };
                }
                string[] str_arr1 = new string[tmp.Count];
                tmp.Keys.CopyTo(str_arr1,0);
    也可以用Linq,效果不知如何,你自己比较下。
    方法二:            string[] str_arr = { "A", "A", "A", "B", "C", "C", "D", };
                var str_arr1 = str_arr.Distinct().ToArray();