有一个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相加
意思可能有点清楚!
在线等回复!!!
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相加
意思可能有点清楚!
在线等回复!!!
解决方案 »
- C#如何连接SQL查询时间段内容
- C#下explicit,implicit和operator关键字的作用和方法
- c#调用matlab类,输出参数读取的问题
- 异步处理问题。。。。
- XML字段映射是什么意思啊,怎么做
- 我在.net Remoting编程中,需要将一个class的实例作为执行结果返回到客户端,不知道怎么做?
- 怎样用C#(windows应用程序)实现SQLServer数据库的自动备份?
- 想从VC++转到.NET,请朋友们说说.NET吧!
- c# 中处理二进制大文件速度慢的问题
- 怎样将 DropDownList control 放在datagrid控件中
- 一个初学者的细节问题??
- 一个初级问题
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
...
-----... -------
List<int> mylist = new List<int>();
for (int i=0; i < mylist .Count ; i++)
{
if (mylist.Contains(ranstr))
{
得到重发参数 操作他
}
}
mylist.Sort();
List <T> lst= new List <T>();
for (int i=0; i < mylist .Count ; i++)
{
if(i % 2 == 0)
{
//i和i-1索引相加
}
}
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)
{
//
}
如果是3.0一下的话,排序然后遍历加?
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类带那方法也需要一个个去比的,只不过是人家已经写好了的方法,直接调咯...
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]); //处理完成后在副本内写回唯一的项
}