【求助】求一个思路:泛型类的使用,详细里面说。
要求:R类中有字段: 编号 数量 C类中有字段 编号 数量
Dt01 5 A1 2
Dt02 5 A2 4
A3 4
然后用R类中的数量拆一下给C,结果为: 编号 来源 数量
A1 Dt01 2
A2 Dt01 3
A3 Dt02 1
A4 Dt02 4
应该够明显了吧,问题是:
1、R类中的数量和C类中的数量是可变的可以是R(4,3,6,32,23)C中(6,35,2,3,1,2,3,16)但是可以确定
的一点是:R中的数量之和 == C中的数量之和。
2、要用类的方法,泛型类的方法来做,不可以用DataTable或者数组的思想。【这是最重要的约束】
请问大神们应该怎么做呢?
[解决办法]
结果:
{ 编号 = A1, 来源 = Dt01, 数量 = 2 }
{ 编号 = A2, 来源 = Dt01, 数量 = 3 }
{ 编号 = A2, 来源 = Dt02, 数量 = 1 }
{ 编号 = A3, 来源 = Dt02, 数量 = 4 }
请按任意键继续. . .
目测你的演示结果后两行是错的,我按我的理解做的。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
foreach (var item in GetValue())
{
Console.WriteLine(item.ToString());
}
}
static IEnumerable<object> GetValue()
{
//初始化r,c,既然你需要用泛型,那就把输入toList一下
var r = new[]
{
new
{
编号 = "Dt01",
数量 = 5
},
new
{
编号 = "Dt02",
数量 = 5
},
}.ToList();
var c = new[]
{
new
{
编号 = "A1",
数量 = 2
},
new
{
编号 = "A2",
数量 = 4
},
new
{
编号 = "A3",
数量 = 4
},
}.ToList();
//下边是计算
var enumR = r.GetEnumerator();
var enumC = c.GetEnumerator();
if (!enumR.MoveNext()
[解决办法]
!enumC.MoveNext())
{
yield break;
}
var rRemain = enumR.Current.数量; //记录集合r中的未分配数量
var cRemain = enumC.Current.数量;
while (enumR.Current != null)
{
if (rRemain > cRemain)
{
yield return new
{
enumC.Current.编号,
来源 = enumR.Current.编号,
数量 = cRemain
};
rRemain -= cRemain;
enumC.MoveNext();
cRemain = enumC.Current.数量;
}
else if (rRemain < cRemain)
{
yield return new
{
enumC.Current.编号,
来源 = enumR.Current.编号,
数量 = rRemain
};
cRemain -= rRemain;
enumR.MoveNext();
rRemain = enumR.Current.数量;
}
else
{
yield return new
{
enumC.Current.编号,
来源 = enumR.Current.编号,
数量 = rRemain
};
cRemain = rRemain = 0;
enumR.MoveNext();
enumC.MoveNext();
}
}
}
}
}