首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

思路:泛型类的使用,详细里面说

2013-01-26 
【求助】求一个思路:泛型类的使用,详细里面说。要求:R类中有字段:编号数量C类中有字段编号数量Dt015A12Dt025A

【求助】求一个思路:泛型类的使用,详细里面说。
要求: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();
                }
            }
        }
    }
}

热点排行