快速查询List中指定的数据
| (1,1) (xIndex,yIndex) | (2,1) | (3,1) | (。。。,。。。) |
| (1,2) | (2,2) | (3,2) | (。。。,。。。) |
| (1,3) | (2,3) | (3,3) | (。。。,。。。) |
| (。。。,。。。) | (。。。,。。。) | (。。。,。。。) | (10000,50) |



.png)
//传统遍历
var objPoints = from b in listPoints where b.xIndex == Convert.ToInt32(this.tbX.Text.Trim().ToString()) select b;
foreach (var item in objPoints)
{
showPoints(item); //显示当前点的text属性值;
}
hsTemp.Clear();//清空哈希表
int TempCount = listPoints.Count;
; i < TempCount; i++)
{
if (hsTemp.ContainsKey(listPoints[i].xIndex.ToString()))//如果哈希表中存在key值
{
hsTemp[listPoints[i].xIndex.ToString()] += "," + i.ToString();//这里和数组结构类似,改变索引值对应的value值信息
}
else
{
hsTemp.Add(listPoints[i].xIndex.ToString(), i);
}
}
this.richTextBox1.Text = "新方法查询结果:\n";
//objPonit = new MyPoint();
string currentPX = this.tbX.Text.Trim().ToString();
if (listPoints != null && currentPX != null)
{
int TempCount = listPoints.Count;
&& hsTemp.Count <= )//如果list中有数据而哈希表中却没有数据
{
FlushTempIndex();
}
if (hsTemp.ContainsKey(currentPX))
{
string[] arrTempIndex = hsTemp[currentPX].ToString().Split(',');//可以直接将分好的数据放到数组中去
int TempIndexCount = arrTempIndex.Length;
;
; i < TempIndexCount; i++)
{
if (int.TryParse(arrTempIndex[i], out TempIndex) && TempIndex < TempCount)
{
showPoints(listPoints[TempIndex]);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 快速查询数据.Models
{
public class MyPoint
{
public int xIndex { get; set; }
public int yIndex { get; set; }
public string text { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using 快速查询数据.Models;
using System.Collections;
namespace 快速查询数据
{
public partial class Form1 : Form
{
List<MyPoint> listPoints = new List<MyPoint>();
private Hashtable hsTemp = new Hashtable();
MyPoint objPonit = null;
public Form1()
{
InitializeComponent();
this.tbY.Enabled = false;
generaPoints();
}
//生成数据源
private void generaPoints()
{
;
; i <= ; i++)
{
; j <= ; j++)
{
objPonit = new MyPoint() { xIndex=i,yIndex=j,text=""+count};
count++;
listPoints.Add(objPonit);
}
}
}
//执行查询
private void btQuery_Click(object sender, EventArgs e)
{
this.richTextBox1.Text = null;
DateTime beforDT = System.DateTime.Now;
//耗时巨大的代码
method2();
DateTime afterDT = System.DateTime.Now;
TimeSpan ts = afterDT.Subtract(beforDT);
this.textBox1.Text = ts.TotalMilliseconds.ToString()+" ms";
}
//显示
private void showPoints(MyPoint objMyPoint)
{
this.richTextBox1.Text += "," + objMyPoint.text;
}
/// <summary>
/// LinQ查询
/// </summary>
private void method1()
{
this.richTextBox1.Text = "传统方法查询结果:\n";
var objPoints = from b in listPoints where b.xIndex == Convert.ToInt32(this.tbX.Text.Trim().ToString()) select b;
foreach (var item in objPoints)
{
showPoints(item);
}
}
/// <summary>
/// List和Hashtable集合查询
/// </summary>
private void method2()
{
this.richTextBox1.Text = "新方法查询结果:\n";
//objPonit = new MyPoint();
string currentPX = this.tbX.Text.Trim().ToString();
if (listPoints != null && currentPX != null)
{
int TempCount = listPoints.Count;
&& hsTemp.Count <= )//如果list中有数据而哈希表中却没有数据
{
FlushTempIndex();
}
if (hsTemp.ContainsKey(currentPX))
{
string[] arrTempIndex = hsTemp[currentPX].ToString().Split(',');//可以直接将分好的数据放到数组中去
int TempIndexCount = arrTempIndex.Length;
;
; i < TempIndexCount; i++)
{
if (int.TryParse(arrTempIndex[i], out TempIndex) && TempIndex < TempCount)
{
showPoints(listPoints[TempIndex]);
}
}
}
}
}
public void FlushTempIndex()
{
hsTemp.Clear();//清空哈希表
int TempCount = listPoints.Count;
; i < TempCount; i++)
{
if (hsTemp.ContainsKey(listPoints[i].xIndex.ToString()))//如果哈希表中存在key值
{
hsTemp[listPoints[i].xIndex.ToString()] += "," + i.ToString();//这里和数组结构类似,改变索引值对应的value值信息
}
else
{
hsTemp.Add(listPoints[i].xIndex.ToString(), i);
}
}
}
}
}
快速查询List中指定的数据的更多相关文章
- mssql sqlserver 禁止删除数据表中指定行数据(转自:http://www.maomao365.com/?p=5323)
转自:http://www.maomao365.com/?p=5323 摘要:下文主要讲述,如何禁止删除数据表中指定行数据 最近收到用户一个需求,禁止所有人删除”表A”中,ID 为1.2.3.4.5的 ...
- 每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容
前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望 ...
- SQL查询显示行号、随机查询、取指定行数据
转自:walkingp 1.显示行号 如果数据没有删除的情况下主键与行号是一致的,但在删除某些数据,行号就与主键不一致了,这时需要查询行号就需要用新的方法,在SQL Server2005之前,需要使用 ...
- 快速向表中插入大量数据Oracle中append与Nologging
来源于:http://blog.sina.com.cn/s/blog_61cd89f60102e7gi.html 当需要对一个非常大的表INSERT的时候,会消耗非常多的资源,因为update表的时候 ...
- 用Spark查询HBase中的表数据
java代码如下: package db.query; import org.apache.commons.logging.Log; import org.apache.commons.logging ...
- 【Linux】查询文件中指定字符串的记录
语法 cat 文件 |grep 查询字符串 例如现在有文件file.dat,文件中内容如下: zhangsan Lisi wangwu123 wangwu890 zhangsan28290 现在想从文 ...
- Mysql快速删除表中重复的数据
表结构 CREATE TABLE T_VENDOR ( ID ) NOT NULL AUTO_INCREMENT COMMENT 'ID', COUNTRY ) DEFAULT NULL COMMEN ...
- 超实用--删除MYSQL中指定的数据的全部表
作过的人都知道,重复测试数据库的苦恼. 用法:# Usage: ./script user password dbnane mysql.nixcraft.in ~~~~~~~~~~~~~ #!/bin ...
- Java快速向数据库中插入大量数据 比如10万条以上
String sql = "insert into table *****"; //必须要有这句,要不然效果不明显 con.setAutoCommit(false); ps = c ...
随机推荐
- RPi WiringPi安装使用
sudo apt-get install git-core git clone git://git.drogon.net/wiringPi cd wiringPi ./build 使用Exam ...
- (中级篇 NettyNIO编解码开发)第七章-java序列化
相信大多数Java程序员接触到的第一种序列化或者编解码技术就是.Java的默认序列化,只需要序列化的POJO对象实现java.io.Serializable接口,根据实际情况生成序列ID,这个类就能够 ...
- LINQ基础(三)
一.并行LINQ System.Linq名称空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上. 尽管Enumerable类给IEnumerable<T& ...
- ASP.NET Web API 自定义 HttpParameterBinding
背景 问题的起因是这样的.群里面一个哥们儿发现在使用 ASP.NET WebAPI 时,不能在同一个方法签名中使用多次 FromBodyAttribute 这个 Attribute .正好我也在用 W ...
- 【JAVAEE学习笔记】hibernate04:查询种类、HQL、Criteria、查询优化和练习为客户列表增加查询条件
一.查询种类 1.oid查询-get 2.对象属性导航查询 3.HQL 4.Criteria 5.原生SQL 二.查询-HQL语法 //学习HQL语法 public class Demo { //基本 ...
- javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)
javaCV图像处理系列: 一.javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 二.javaCV图像处理之2:实时视频添 ...
- ocr智能图文识别 tess4j 图文,验证码识别 分享及所遇到的问题
自己对tess4j的使用总结 1,tess4j 封装了 tesseract-ocr 的操作 可以用很简洁的几行代码就实现原本tesseract-ocr 复杂的实现逻辑 如果你也想了解tesseract ...
- django 自定义过滤器(filter)处理较为复杂的变量的实例
简述:django 在views中有数据需要通过字典(dict)的方式传递给template,该字典中又包含了字典,而且字典中的键值还是一个对象,在template中处理传递过来的数据的时候,字典不能 ...
- 编写自己的Nmap(NSE)脚本
编写自己的Nmap脚本 一.介绍 在上一篇文章Nmap脚本引擎原理中我们介绍了基本的NSE知识,这篇文章介绍如何基于Nmap框架编写简单的NSE脚本文件,下一篇文章,Nmap脚本文件分析(AMQP协议 ...
- 开始学习机器学习,从Ng的视频开始
时隔开5个月,忙完了考研和毕设后终于有时间搞自己想搞得,研究生导师方向是图像处理与机器学习结合,重新开工 何为机器学习? 对于机器学习(Machine Learning)的定义大体上有两种,第一种是美 ...