有一个ArrayList对象arr里面存放了N个实体类Ware对象
Ware有三个属性,sp_code//商品编号
                 dvlcode//供应商编号
                 number//数量现在我要将 商品编号相等并且供应商也相等的数量加起来  比如第一个Ware对象为:sp_code=‘sp001’,dvlcode=‘d001’,cnt=90
     第二个Ware对象为:sp_code=‘sp001’,dvlcode=‘d001’,cnt=80
     第三个Ware对象为:sp_code=‘sp001’,dvlcode=‘d002’,cnt=20
     第四个Ware对象为:sp_code=‘sp001’,dvlcode=‘d002’,cnt=70
     ......   那么我想得到的结果是将第一个Ware对象和第二个Ware对象合并,并且把CNT相加
     把第三个Ware对象和第四个Ware对象合并,并且把CNT相加
   
    意思可能有点清楚!
          在线等回复!!! 

解决方案 »

  1.   

    转换到List<Ware>操作吧,如果你的是VS2008,用LINQ很容易实现的。
      

  2.   


    var spGroups = from item in arr group item by item.sp_code
    var dvlGroups = from item in spGroups gourp item by item.key
    var result = from item in dvlGroups select new{item.key,item.Value.Sum(a=>a.cnt)}大概就是这样的树形结构
    arr-----sp_code1-------dvlcode1
                           dvlcode2
                           ...
       -----sp_code2-------dvlcode1
                           dvlcode2
                           ...
       -----...     -------
      

  3.   

    最佳方法
    List<int> mylist = new List<int>();
            for (int i=0; i <  mylist .Count ; i++)
            {
                    if (mylist.Contains(ranstr))
                {
                     得到重发参数 操作他
                }
            }
            mylist.Sort();
      

  4.   

    先把arr按spcode分组  得到一个IGrouping的集合  分组后每一项的key相同,value是集合然后对这个value集合里面的每一项按dvlcode分组  得到另一个IGrouping集合然后针对第2个集合里面的每一项的value集进行cnt计算SUM
      

  5.   

    定义两个List<T>泛型类,循环遍历第一个,添加数据到第二个
    List <T> lst= new List <T>(); 
            for (int i=0; i <  mylist .Count ; i++) 
            { 
                 if(i % 2 == 0)
                  {
    //i和i-1索引相加
    }         
            } 
      

  6.   

    如果楼主给我详细的代码,我可以给你详细的实现方法,直接调试好给你。用LINQ查询实在太容易了,写过SQL语句的都知道,在SQL里只要用个GROUP BY分组就可以实现的功能,现在有了LINQ查询,也一样可以实现这样的功能了。
      

  7.   

    LINQ 真有这么神奇吗? WEB和WINFORM上都可行吗? 看样子又得学VS2008了 
      

  8.   

    Dictionary<string,int> dic = new Dictionary<string,int>();
    string data =string.Empty;
    foreach(Ware w in arr)
    {
       data = Ware.sp_code.ToString()+Ware.dvlcode.ToString(); 
       if(!dic.ContainsKey(data) )
        { 
          dic.Add(data,Ware.cnt);
       }
       else
       {
       dic[data]=dic[data]+Ware.cnt
      }
    }
    //
    如果用上面dic 重新构造Ware 集合
    foreach(DictionaryEnrty d in dic)
    {
      //
    }
      

  9.   

    还是用LINQ吧,如果是.NET3.0的话。LINQ的语句有些类似SQL,对这类型的操作也蛮快的。
    如果是3.0一下的话,排序然后遍历加?
      

  10.   

                ArrayList A = new ArrayList();               //  你要处理的ArrayList替换new ArrayList(); A = dDistinctA
                ArrayList dDistinctA = new ArrayList();      //  你要处理的ArrayList替换new ArrayList(); A = dDistinctA                   for (int i = 0; i < A.Count; i++)
        {
                    dDistinctA.RemoveAt(i);   //删除副本的当前项
                    for (int ii = 1; ii < A.Count; ii++)
                    {
                        if (((ware)A[i]).sp_code == ((ware)A[ii]).sp_code && ((ware)A[i]).dvlcode == ((ware)A[ii]).dvlcode)
                        {
                            ((ware)A[i]).cnt = ((ware)A[i]).cnt + ((ware)A[ii]).cnt;
                            dDistinctA.RemoveAt(ii);   //找到有相同的sp_code,和dvlcode时删除副本对应的项
                        }
                    }
                    dDistinctA.Add((ware)A[i]);  //处理完成后在副本内写回唯一的项
         }楼主要求的,怎样都需要一个个比才行的,即使ArrayList类带那方法也需要一个个去比的,只不过是人家已经写好了的方法,直接调咯...
      

  11.   

    因为有1,2一组,3,4一组的条件,所以只能使用for(int i=0,count...了)
      

  12.   

       修改下,之前的有问题
               ArrayList A = new ArrayList();              //  你要处理的ArrayList替换new ArrayList(); A = dDistinctA 
                ArrayList dDistinctA = new ArrayList();      //  你要处理的ArrayList替换new ArrayList(); A = dDistinctA                  for (int i = 0; i < A.Count; i++) 
                { 
                    for (int ii = 1; ii < A.Count; ii++) 
                    { 
                        if (((ware)A[i]).sp_code == ((ware)A[ii]).sp_code && ((ware)A[i]).dvlcode == ((ware)A[ii]).dvlcode) 
                        { 
                            ((ware)A[i]).cnt = ((ware)A[i]).cnt + ((ware)A[ii]).cnt; 
                            dDistinctA.RemoveAt(ii);  //找到有相同的sp_code,和dvlcode时删除副本对应的项 
                        } 
                    } 
                    dDistinctA.RemoveAt(i);    //删除副本的当前项 
                    dDistinctA.Insert(i,(ware)A[i]);   //处理完成后在副本内写回唯一的项 
                   }