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中。(第一次运行的时候,前一个元素为空,所以把第一个元素单独拿出来处理)
最新文章
- web存储
- linux-bash shell学习
- appserv中php升级问题
- Ajax本地跨域问题 Cross origin requests are only supported for HTTP
- 环回接口(loopback interface)的新认识
- 内部通信服务Factory(WCF)
- Oracle 给已创建的表增加自增长列
- [nginx]Nginx禁止访问robots.txt防泄漏web目录
- Java I/O学习(附实例和详解)
- Mingyang.net:为什么不将Bean定义在Action参数中?
- OC 加密
- 解决pip安装时 UnicodeDecodeError 问题
- jQuery常用方法集锦
- Group by Grouping
- Python之re模块(结合具体业务)
- 使用脚本删除hive分区中的问题(expecting KW_EXCHANGE near mytable in alter exchange partition)
- HDU 1584(蜘蛛牌 DFS)
- 《Java从入门到精通》学习总结2
- js设计模式(五)---观察者模式
- vue组件之间数据的传递
热门文章
- ViewBag &; ViewData
- node 学习资料
- neutron通信原理理解
- python2核心类库:urllib、urllib2的区别和使用
- 【转】类似py2exe软件真的能保护python源码吗
- ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)
- 【Mysql】事务日志-Write Ahead logging vs command-logging(转)
- 【IntelliJ 】IntelliJ IDEA 2017激活码
- QT中实现应用程序的单例化
- bzoj2909: Bipartite Numbers