List<CharacteristicStat> listStat;
List<string> listTmp = new List<string>();
for (int i = 0; i < listStat.Count; i++)
{
if (!listTmp.Contains(listStat[i].TARGET_X))
{
listTmp.Add(listStat[i].TARGET_X);
}
}listStat中有1.5w条记录。我想把TARGET_X重复的过滤掉。这样操作要3秒左右,怎么样提高效率呢?
List<string> listTmp = new List<string>();
for (int i = 0; i < listStat.Count; i++)
{
if (!listTmp.Contains(listStat[i].TARGET_X))
{
listTmp.Add(listStat[i].TARGET_X);
}
}listStat中有1.5w条记录。我想把TARGET_X重复的过滤掉。这样操作要3秒左右,怎么样提高效率呢?
list[i].TARGET_X==list[i-1].TARGET_X反向遍历这样应该会快点吧因为不用去跟你的listTmp 比较了
然后在循环中用count变量
建议楼主试试listTmp用hashtable类型
说明:筛选字段中不相同的值。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT [City] FROM [Customers]var q = (
from c in db.Customers
select c.City )
.Distinct();
语句描述:查询顾客覆盖的国家。[/code]
先定义一个int j=listStat.Count
再循环
list_test=list_test.Distinct<MA01.Model.RequestOrder>().ToList<MA01.Model.RequestOrder>();
List <string> listTmp = new List <string>();
for (int i = 0; i < listStat.Count; i++)
foreach(CharacteristicStat c in listStat)
{
if (!listTmp.Contains(c.TARGET_X))
{
listTmp.Add(c.TARGET_X);
}
}
List <string> listTmp = new List <string>();
for (int i = 0; i < listStat.Count; i++)
foreach(CharacteristicStat c in listStat)
{
if (!IsExists(listTmp,c.TARGET_X))
{
listTmp.Add(c.TARGET_X);
}
}
private bool IsExists(List <string> list,string str)
{
for(int i=0;i<list.count;i++)
{
if(list[i]==str)
{
return true;
}
}
return false;
}
1、实现接口
public class ChEqualityComparer : IEqualityComparer<CharacteristicStat> {
public bool Equals(CharacteristicStat x, CharacteristicStat y) {
return x.TARGET_X == y.TARGET_X;
} public int GetHashCode(CharacteristicStat obj) {
return obj.TARGET_X.GetHashCode();
}
}
2、调用方法:
List<CharacteristicStat> distinctArr = array.Distinct(new ChEqualityComparer()).ToList<CharacteristicStat>();如果你使用的是.NET 2.0则可以使用下面的方法:
1、实现接口
public class ChComparer : IComparer<CharacteristicStat> {
public int Compare(CharacteristicStat x, CharacteristicStat y) {
// 这里的比较规则由你自己实现,我假设他们都是整数
int a = Convert.ToInt32(x.TARGET_X);
int b = Convert.ToInt32(y.TARGET_X);
return a - b;
}
}
2、调用方法:
array.Sort(new ChComparer());
for (int i = 0; i <= array.Count - 1; i++) {
if (array[i].TARGET_X == array[i + 1].TARGET_X) {
array.RemoveAt(i);
}
}
public class DistinctIterator { private List<CharacteristicStat> source;
// 这里使用字典对象力求达到最快的查找速度
private Dictionary<string, CharacteristicStat> duplicatedElement = new Dictionary<string, CharacteristicStat>();
private int index = -1; public DistinctIterator(List<CharacteristicStat> list) {
this.source = list;
} public object Current {
get {
return this.source[index];
}
} // 这里可以抽象为接口的方法由调用者提供实现
private bool Duplicate(CharacteristicStat ch) {
if (duplicatedElement.ContainsKey(ch.TARGET_X)) {
return true;
}
else {
duplicatedElement.Add(ch.TARGET_X, ch);
return false;
}
} public bool Move() {
index++;
if (!Duplicate(this.source[index])) {
if (index < this.source.Count) {
return true;
}
}
return false;
} public List<CharacteristicStat> ToList() {
List<CharacteristicStat> list = new List<CharacteristicStat>();
while (this.Move()) {
list.Add((CharacteristicStat)this.Current);
}
return list;
}
}
调用代码如下:
List<CharacteristicStat> list = new DistinctIterator(array).ToList();
这三种方法效率差不多,没有明显的差异。
对 TARGET_X 进行排序
(排序算法, 比如二分法 比当前采用的重复的比较法效率应该会高很多的)
在排序过程中,去除重复的,并记录 i所有i的记录即为所需
楼主干脆用linq 的过滤重复数据的语法算了,瞬间能够完成。如果打算用.net 2.0来解决,不设计高超算法的情况下。每次添加一个值马上把listStat集合里面的的刚才的值删除。
listStat.RemoveAll(delegate(string X) { return X == 值; });
List <CharacteristicStat> listStat;
List <string> listTmp = new List <string>();
foreach(CharacteristicStat C in listStat)
{
listTmp.add( C.TARGET_X);
listStat.RemoveAll(delegate(string X) { return X == C.TARGET_X; });
}
List<string> distinctCharacteristicStat(List<CharacteristicStat> listStat) {
List<string> result = new List<string>();
Dictionary<string, bool> d = new Dictionary<string, bool>();
foreach (CharacteristicStat ch in listStat) {
if (d.ContainsKey(ch.TARGET_X) == false) {
d.Add(ch.TARGET_X, true);
result.Add(ch.TARGET_X);
}
}
return result;
}
你好,是ASP.NET的高手!
我现在遇到一种情况,在当前也显示的从数据库读出的表能否保存为word?