110,538
社区成员
发帖
与我相关
我的任务
分享
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();
}
}
}
}
}