集合里查找数据

比如 List<string> a=new List<string>();
a里面有{111,222,333,444,555,666,777,888,999,111,222,333,444}
找出交集得到结果是
111,222,333,444

速度要快的,数据量是在百万条之上。什么算法最快? ------Solutions------ 找出 出现次数 2次以上的 ? ------Solutions------ 对,速度要快的 ------Solutions------List<string> list = a.Where(s => a.Count(s2 => s == s2) >= 2).Distinct().ToList();

List<string> list = a.AsParallel().Where(s => a.Count(s2 => s == s2) >= 2).Distinct().ToList();

linq就是妙。学习!
------Solutions------
速度还是慢,我本来查询50000条数据要花50秒
现在感觉更慢了!
------Solutions------
用字典试试:

Dictionary<string,int> dic = new Dictionary<string,int>();
foreach(string s in a)
{
    if(dic.ContainsKey(s))
        dic[s]++;
    else 
        dic.Add(s,1);
}
List<string> list = new List<string>();
foreach(string s in dic)
{
    if(dic[s]>1)
       list.Add(s);
}

//写了一个DEMO 测试了一下不同的方法所有的时间
//DEMO中的LIST中有100条数据  每个方法重复执行100次
void Main()
{
InitList();

System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
for(int i=1;i<=100;i++)
{
  GetLINQFunctionTestTime();
}
stopwatch.Stop();
Console.WriteLine("使用 LINQ 总共用时 {0} 毫秒,平均 {1}毫秒/次",stopwatch.ElapsedTicks,stopwatch.ElapsedTicks/100);

stopwatch.Start();
for(int i=1;i<=100;i++)
{
  GetOtherFunctionTestTime();
}
stopwatch.Stop();
Console.WriteLine("使用 Other 总共用时 {0} 毫秒,平均 {1}毫秒/次",stopwatch.ElapsedTicks,stopwatch.ElapsedTicks/100);

stopwatch.Start();
for(int i=1;i<=100;i++)
{
  GetDictionaryFunctionTestTime();
}
stopwatch.Stop();
Console.WriteLine("使用 Dictionary 总共用时 {0} 毫秒,平均 {1}毫秒/次",stopwatch.ElapsedTicks,stopwatch.ElapsedTicks/100);

/*
使用 LINQ 总共用时 7344 毫秒,平均 73毫秒/次
使用 Other 总共用时 15501 毫秒,平均 155毫秒/次
使用 Dictionary 总共用时 22191 毫秒,平均 221毫秒/次

*/
}

void  GetLINQFunctionTestTime()
{
  var query=list.GroupBy(l=>l).Where(g=>g.Count()>1).Select(g=>g.Key).ToList();
}

void GetOtherFunctionTestTime()
{
  ArrayList ay=new ArrayList();
  List<int> result=new List<int>();
  foreach(int str in list)
  {
if(ay.Contains(str))
{
  result.Add(str);
}
else
{
  ay.Add(str);
}
  }
}

void GetDictionaryFunctionTestTime()
{
    Dictionary<int,int> dic = new Dictionary<int,int>();
foreach(int s in list)
{
if(dic.ContainsKey(s))
dic[s]++;
else
dic.Add(s,1);
}
List<int> result = new List<int>();
foreach(var s in dic)
{
if(dic[s.Key]>1)
result.Add(s.Key);
}

}
public List<int> list = new List<int>();
void InitList()
{
  var list1=Enumerable.Range(10,50);  // 10 -  59
  var list2=Enumerable.Range(20,20);  // 20 -  39
  var list3=Enumerable.Range(40,30);  // 40 -  69
  list=list1.Concat(list2).Concat(list3).ToList();
}

时间: 2024-11-05 16:09:04

集合里查找数据的相关文章

运用反射原理的简单工厂模式和运用反射原理从数据库里读出数据直接封装到实体集合里

一:简单工厂 最初学习的一个运用简单工厂的例子是做一个计算器: 首先是接口 public interface Cal { public double Calcu(double num1,double num2); } 然后是加减乘除类实现计算接口: public class Add implements Cal{ @Override public double Calcu(double num1, double num2) { return num1+num2; } } 再写一个工厂类,里面有一

使用集合组织相关数据

一.集合的概念: 集合:某些指定的对象集在一起就是集合. 比如:一个容器内有机器猫,樱桃小丸子,奥特曼,这个包括他们的容器就叫做集合 数组:可以存储相同数据类型的一堆数据的容器 二.ArrayList的使用: 在S1的时候我们学习了数组,但是数组有一定的局限性,由于给数组进行添加,删除的时候特别麻烦所以有了集合来帮忙实现所具备的功能而不像数组那么局限 集合的优点:{1.自动扩容 {2.集合中很多方法能让我们更加快捷的操作集合中的数据 集合的本质:{1.使用ArrayList首先需要引入命名空间

使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NET的一部分.今天我们WCF分布式开发步步为赢第8节的内容:使用数据集(DataSet).数据表(DataTable).集合(Collection)传递数据.本节内容除了介绍几个类型概念外的,同样会详细给出代码的实现过程.此外我们会分析这几种数据类型的优势和缺点,以及在面向对象的服务开发过程中如何解决

Java基础知识强化之IO流笔记45:IO流练习之 把集合中的数据存储到文本文件案例

1. 把集合中的数据存储到文本文件案例:    需求:把ArrayList集合中的字符串数据存储到文本文件 ? (1)分析:通过题目的意思我们可以知道如下的一些内容,ArrayList集合里存储的是字符串.遍历ArrayList集合,把数据获取到.然后存储到文本文件中.文本文件说明使用字符流. (2) 数据源: ArrayList<String> -- 遍历得到每一个字符串数据 目的地: a.txt -- FileWriter -- BufferedWriter 2. 代码示例: 1 pack

获取同一个页面里的数据

获取同一个页面里某数据之属性法 html代码: <a id=<s:property value="id" /> onlinearea="<s:property value="online_area" />" notlinearea="<s:property value="notline_area" />" onclick="updatep(this)&qu

javaScript(拼写树形)+ajax请求,去后台查找数据

第一步:页面加载完成时,利用jquery中的一函数,调用js方法,js方法,发送ajax请求,去后台查找父类权限集合,响应回来json格式的数据,对数据进行操作,往页面上添加内容 1 //页面初始化加载菜单内容 2 $(document).ready(function(){ 3 loadPower(0); 4 }); 5 6 //加载一级权限菜单 7 function loadPower(pId){ 8 $.ax({ 9 type: "get", 10 url: "<%

List集合去除重复数据

[转自]Java中List集合去除重复数据的方法 1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j > i; j -- ) { if (list.get(j).equals(list.get(i))) { list.remove(j); }

批量插入数据, 将DataTable里的数据批量写入数据库的方法

大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql: adapter.update()批量更新 MySqlBulkLoader, 这个是从文件里边到的, 有个实现是先将DATATable编程CSV文件, 在用MySqlBulkLoader导入MySql 参考文章: http://theonetechnologies.com/outsourcing/

【MM系列】在SAP里查看数据的方法

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]在SAP里查看数据的方法 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 需求分析 有些时候我们会对采购订单或者销售订单中的条件问题进行多次分析,无论是消息输出类型还是定价条件或税收条件,当然很多时候我们可以通过查找条件记录的存储表,来查看数据进行分析,这是其中的一种方法,比较直接,但是有的时候却显得不是很方便,要