我现在,有个需求就是,不停的输入某个信息,然后最后统一处理。
但是,每次输入后都要判断是否已经输入过了。可能要上千条。且资源还有限。这个定义,不能改了。只能选择好的,优化的,可行的方法去做。
请大家给点思路。c#。最后能有示例代码。非常感谢。
但是,每次输入后都要判断是否已经输入过了。可能要上千条。且资源还有限。这个定义,不能改了。只能选择好的,优化的,可行的方法去做。
请大家给点思路。c#。最后能有示例代码。非常感谢。
解决方案 »
- 怎么复制整张表的所有数据?
- 关于Grid中改变图片大小
- 如何提取.exe文件图标,并加载到ListView中?
- 求一些异步编程设计模式的例子!!!~
- 急需个javascript(急)
- checkedlistbox如何add动态添加内容 如把 1,"姓名" 这样的数据加入到 value和text 不是用绑定的
- HttpWebRequest 和 浏览器打开有什么区别?高手过来
- 窗体等控件的OnPaint()方法到底是什么时候调用的,高分求解!
- 用 vs.net调试c#程序,怎么结束后,属性窗口没了?即使再从视图里面打开属性框,也是灰的.怎么回事?
- C#读写自定义的结构体有什么方便的方法
- C# Socket 接收消息包的问题
- 用C#如何删除一个字符串里的双字节的空白字符?
ls.Contains("")
这样应该可以满足吧..
...
List.Contains(...)
不是吧,这么多勋章,给出这么个不合理的方法?显然应该用HashSet<T> (复杂度O(1)),而不是List<T>(复杂度O(n))
不管什么先加进来,加入到list<T>里面,然后使用list<T>.Distinct();
如:
var sourceFiles = sourceFileList.Distinct();
sourceFileList是一个List<string> 类型。
其中TValue占位,不用就行了,传一个bool,节省空间
Dictionary<TKey,bool>
2.0也有哈希.楼主看看下面的代码.你的问题就解决了.
#region ArrayList的示例应用
/// 方法名:DelArraySame
/// 功能: 删除数组中重复的元素
/// </summary>
/// <param name="TempArray">所要检查删除的数组</param>
/// <returns>返回数组</returns>
public string[] DelArraySame(string[] TempArray)
{
ArrayList nStr = new ArrayList();
for (int i = 0; i < TempArray.Length; i++)
{
if (!nStr.Contains(TempArray[i]))
{
nStr.Add(TempArray[i]);
}
}
string[] newStr = (string[])nStr.ToArray(typeof(string));
return newStr;
}
#endregion
不排序的话,恐怕只能contains了吧?
功耗也不是大的要命的
20-50多万词典数据(纯文本txt),排序,索引建立,数据处理,总之各种折腾内存,大概100M左右,耗时也就几秒.
ArrayList也叫哈希?
都不知道你的“星”是怎么弄出来的........而且2.0也没人用ArrayList啊,至少也要用List<T>啊,汗.......
---------------------------------------------------
兄弟 可以低调点不?ArrayList2.0中应用还是用的.
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int count=0;
Random rand = new Random();
List<int> list = new List<int>();
while (count < 5)
{
int num = rand.Next(10);
if (!list.Contains(num))
list.Add(num);
else
continue; count++;
} foreach (int n in list)
Console.WriteLine(n);
}
}
Random rand = new Random();
Hashtable hslist = new Hashtable();
while (count < 5)
{
int num = rand.Next(10);
hslist[num]=0; count++;
} foreach (int n in hslist.keys)
Console.WriteLine(n);
ArrayList
哈希
Dictionary 键值
Dictionary,或者说,包括list,hashtable等,这些集合
在复杂度和资源占用这两方面,谁强谁弱呢?
另外,怎么去验证。我今天比较了一下hashtable和Dictionary。
在运行时间上,hashtable是Dictionary的3倍多。 #region "判断是否重复扫码的集合类例子" int time = 0;
/// <summary>
/// 计数
/// </summary>
private void count()
{
while (true)
{
Thread.Sleep(10);
time = time + 1;
}
} /// <summary>
/// Hashtable 判断重复
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
int c = 0;
time = 0;
Thread t = new Thread(new ThreadStart(count));
t.Start();
Hashtable hs = new Hashtable(); for(int i = 0;i< 10000;i++)
{
c = c + 1;
ClsUser user = new ClsUser();
user.CangKuID = "asdjflk";
user.Password = "fsadfasdf";
user.UserID = "asdfsdaf";
if (hs.Contains(i))
{
MessageBox.Show("double");
}
else
{
hs.Add(i, user);
}
} foreach (DictionaryEntry de in hs)
{
c = c + 1;
string key = Convert.ToString(de.Key);
ClsUser uu = (ClsUser)de.Value;
} t.Abort(); MessageBox.Show("over time=" + Convert.ToString(time) +" cishu:" + Convert.ToString(c));
} /// <summary>
/// Dictionary 判断重复
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
int c = 0;
time = 0;
Thread t = new Thread(new ThreadStart(count));
t.Start();
Dictionary<int, ClsUser> dt = new Dictionary<int, ClsUser>(); for (int i = 0; i < 10000; i++)
{
c = c + 1;
ClsUser user = new ClsUser();
user.CangKuID = "asdjflk";
user.Password = "fsadfasdf";
user.UserID = "asdfsdaf";
if (dt.ContainsKey(i))
{
MessageBox.Show("double");
}
else
{
dt.Add(i, user);
}
} foreach (KeyValuePair<int,ClsUser> item in dt)
{
c = c + 1;
int key = item.Key;
ClsUser uu = item.Value;
}
t.Abort();
MessageBox.Show("over time=" + Convert.ToString(time) + " cishu:" + Convert.ToString(c));
} #endregion