zoukankan      html  css  js  c++  java
  • c#数组去重

    第一种:

    string[] stringArray = { "aaa", "bbb", "aaa", "ccc", "bbb", "ddd", "ccc", "aaa", "bbb", "ddd" };
    //List用于存储从数组里取出来的不相同的元素
    List<string> listString =new List<string>();
    foreach (string eachString in stringArray)
    {
    if (!listString.Contains(eachString))
    listString.Add(eachString);
    }
    //最后从List里取出各个字符串进行操作
    foreach (string eachString in listString)
    {
    Console.Write(eachString); //打印每个字符串
    }

    原理应该比较容易理解吧,通过遍历原数组中的每一个元素,将元素添加到新的泛型listString中,如果listString已经包含了就不添加,当遍历完原数组,泛型中保存的就是去重后的结果了。

    在数据量小的时候用这个算法还OK,但如果数据量比较大时(我工作中需要将5万以上左右的数据去重)其效率就不是那么让人接受了,一次处理需要耗费近1分钟左右的时间(测试电脑用的Inter Pentium D 2.8GHz、1G内存)

    由于需求对结果的元素序列没有任何要求,我采取了下列算法来提高效率

    第二种:

    string[] stringArray = {...因为是从文件读取的,这里省略了...}
    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中。(第一次运行的时候,前一个元素为空,所以把第一个元素单独拿出来处理)

  • 相关阅读:
    UVA-679車的摆放(DFS)
    全排列问题(递归调用)
    STL栈的应用—UVA673
    nefu 84 五指山(扩展欧几里德)
    POJ 1061 青蛙的约会(扩展欧几里德)
    nefu 116 两仪剑法
    nefu 115 斐波那契的整除
    HDU 2099 整除的尾数
    Codeforces Round #339 (Div. 2) B. Gena's Code
    Codeforces Round #339 (Div. 2) A. Link/Cut Tree
  • 原文地址:https://www.cnblogs.com/yunpeng521/p/7047381.html
Copyright © 2011-2022 走看看