List<string> list=new List<string>();for(int i=0;i<100;i++){
list.add(i+"");
}for(int i=0;i<300;i++){
foreach(string a in list){
if(a==i+"")
//做事
}}上面这种是一对多的关系,我希望有更快,比得更少的做法。正面是我的做法
bool flag=false;
string str=null;
List<string> list=new List<string>();for(int i=0;i<100;i++){
list.add(i+"");
}for(int i=0;i<300;i++){
foreach(string a in list){
if(a==i+""){
flag=true;
//做事
str=a;
}
}
if(flag)//找到一个删除一个,这样越来越小。
list.Remove(a);
}
但是,这样一样很慢,求高手指教!!!

解决方案 »

  1.   


    bool flag=false;
    string str=null;
    List<string> list=new List<string>();for(int i=0;i<100;i++){
    list.add(i+"");
    }for(int i=0;i<300;i++){
    foreach(string a in list){
    if(a==i+""){
    flag=true;
    //做事
    str=a;
    }
    }
    if(flag)//找到一个删除一个,这样越来越小。
    list.Remove(str);
    }上面list.Remove(a); 改成list.Remove(str);
      

  2.   

    手写的例子,错误还不少。
    bool flag=false;
    string str=null;
    List<string> list=new List<string>();for(int i=0;i<100;i++){
    list.add(i+"");
    }for(int i=0;i<300;i++){
    foreach(string a in list){
    if(a==i+""){
    flag=true;
    //做事
    str=a;
    }
    else
    flag=false;
    }
    if(flag)//找到一个删除一个,这样越来越小。
    list.Remove(str);
    }加上了一个else
      

  3.   

    这样查找太慢string str=null;List <string> list=new List <string>();
    Dictionary<string, int> strDict = new Dictionary<string, int>();for(int i=0;i <100;i++)
    {
    list.add(i+"");
    strDict[i+""] = i;
    }for(int i=0;i<300;i++)
    {
       bool flag=false;
       int index;
       if(strDict.TryGet(i+"", out index))
       {
          flag=true;
          //做事
          str = i + "";
       } 
      
      if(flag)//找到一个删除一个,这样越来越小。
       list.RemoveAt(index);
    }
      

  4.   

    ohlist.RemoveAt(index); 这个就不需要了string str=null;List <string> list=new List <string>();
    Dictionary <string, int> strDict = new Dictionary <string, int>();for(int i=0;i <100;i++)
    {
    list.add(i+"");
    strDict[i+""] = i;
    }for(int i=0;i <300;i++)
    {
      bool flag=false;
      int index;
      if(strDict.TryGet(i+"", out index))
      {
          flag=true;
          //做事
          str = i + "";
      } } 
      

  5.   

    传说中...有一种武器叫Linq...IEnumerable<T>.Distinct 方法  Distinct()  通过使用默认的相等比较器对值进行比较返回序列中的非重复元素。
      Distinct(IEqualityComparer<UMP>)  通过使用指定的 IEqualityComparer<T> 对值进行比较返回序列中的非重复元素。IEnumerable<T>.Elements 方法    Elements()  返回源集合中每个元素和文档的子元素的集合。
      Elements(XName)   返回源集合中经过筛选的每个元素和文档的子元素集合。集合中只包括具有匹配 XName 的元素。IEnumerable<T>.Except 方法    Except(IEnumerable<UMP>)  通过使用默认的相等比较器对值进行比较生成两个序列的差集。
      Except(IEnumerable<UMP>, IEqualityComparer<UMP>) 通过使用指定的 IEqualityComparer<T> 对值进行比较产生两个序列的差集。IEnumerable<T>.Intersect 方法    Intersect(IEnumerable<UMP>)  通过使用默认的相等比较器对值进行比较生成两个序列的交集。
      Intersect(IEnumerable<UMP>, IEqualityComparer<UMP>)  通过使用指定的 IEqualityComparer<T> 对值进行比较以生成两个序列的交集。IEnumerable<T>.SkipWhile 方法    SkipWhile(Func<UMP, Boolean>)  只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。
      SkipWhile(Func<UMP, Int32, Boolean>)  只要满足指定的条件,就跳过序列中的元素,然后返回剩余元素。将在谓词函数的逻辑中使用元素的索引。 
      

  6.   

    随便问题个问题,我现在使用了excel.dll在debug里面可以运行,但是我到了release里面,就不行了。说找不到excel.dll!!!