最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.net C# 實現(xiàn)任意List的笛卡爾乘積算法代碼

 更新時間:2013年05月26日 12:07:28   作者:  
笛卡爾(Descartes)乘積又叫直積。假設(shè)集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。
可以擴(kuò)展到多個集合的情況。類似的例子有,如果A表示某學(xué)校學(xué)生的集合,B表示該學(xué)校所有課程的集合,則A與B的笛卡爾積表示所有可能的選課情況

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace 算法
{
    public static class 算法
    {
        /// <summary>
        /// 笛卡爾乘積
        /// </summary>
        public static List<List<T>> CartesianProduct<T>(this List<List<T>> lstSplit)
        {
            int count = 1;
            lstSplit.ForEach(item => count *= item.Count);
            //count = lstSplit.Aggregate(1, (result, next) => result * next.Count);

            var lstResult = new List<List<T>>();

            for (int i = 0; i < count; ++i)
            {
                var lstTemp = new List<T>();
                int j = 1;
                lstSplit.ForEach(item =>
                {
                    j *= item.Count;
                    lstTemp.Add(item[(i / (count / j)) % item.Count]);
                });
                lstResult.Add(lstTemp);
            }
            return lstResult;
        }
    }

    class Program
    {
        public static void Main()
        {
            StringDemo();
            根據(jù)Sector生成Routing的Demo();
            根據(jù)Sector生成Routing的Demo2();
        }

        /// <summary>
        /// 簡單字符串 笛卡爾乘積
        /// </summary>
        private static void StringDemo()
        {
            var lstSource = new List<List<string>>
            {
                new List<string>() { "A","B","C"},
                new List<string>() { "D","E","F"},
                new List<string>() { "G","H","I"},
            };

            var sw = new Stopwatch();
            sw.Start();
            var lstResult = lstSource.CartesianProduct();
            Console.WriteLine(sw.Elapsed);
        }


        private static void 根據(jù)Sector生成Routing的Demo()
        {
            //默認(rèn)允許輸入多個BookingClass,表示使用任意一個都可以。
            var lstSectorDef = new List<Sector>
            {
                new Sector{ SeqNO=1, BookingClass="A/A1/A2"},
                new Sector{ SeqNO=2, BookingClass="B/B1/B2"},
                new Sector{ SeqNO=3, BookingClass="C/C1/C2"},
                //.....數(shù)量不定
            };


            var sw = new Stopwatch();
            sw.Start();

            var lstSectorGroup = new List<List<Sector>>();
            lstSectorDef.ForEach(item =>
            {
                var lstSector = new List<Sector>();
                foreach (var bookingClass in item.BookingClass.Split('/'))
                {
                    var sector = item.Clone();
                    sector.BookingClass = bookingClass;

                    lstSector.Add(sector);
                }
                lstSectorGroup.Add(lstSector);
            });

            var lstRouting = lstSectorGroup.CartesianProduct();

            Console.WriteLine(sw.Elapsed);
        }


        private static void 根據(jù)Sector生成Routing的Demo2()
        {
            //默認(rèn)允許輸入多個BookingClass,表示使用任意一個都可以。
            var lstSectorDef = new List<Sector>
            {
                new Sector{ SeqNO=1, BookingClass="A1/A2/A3"},
                new Sector{ SeqNO=2, BookingClass="B1/B2/B3"},
                new Sector{ SeqNO=3, BookingClass="C1/C2/C3"},
                //.....數(shù)量不定
            };

            var sw = new Stopwatch();
            sw.Start();

            var lstTemp = new List<List<string>>();
            lstSectorDef.ForEach(item =>
            {
                lstTemp.Add(item.BookingClass.Split('/').ToList());
            });

            var lstBookingClassGroup = lstTemp.CartesianProduct();

            var lstRouting = new List<List<Sector>>();
            for (int i = 0; i < lstBookingClassGroup.Count; i++)
            {
                var lstSector = new List<Sector>();
                for (int j = 0; j < lstSectorDef.Count; j++)
                {
                    var sector = lstSectorDef[j].Clone();
                    sector.BookingClass = lstBookingClassGroup[i][j];
                    lstSector.Add(sector);
                }
                lstRouting.Add(lstSector);
            }

            Console.WriteLine(sw.Elapsed);
        }

 

    }

    [DebuggerDisplay("Sector:SeqNO={SeqNO},BookingClass={BookingClass}")]
    public class Sector
    {
        public int SeqNO { get; set; }
        public string BookingClass { get; set; }

        public Sector Clone()
        {
            return this.MemberwiseClone() as Sector;
        }
    }
}

相關(guān)文章

  • C#中英文混合字符串截取函數(shù)

    C#中英文混合字符串截取函數(shù)

    這篇文章介紹了C#中英文混合字符串截取函數(shù),有需要的朋友可以參考一下
    2013-09-09
  • 一文帶你了解C#中的協(xié)變與逆變

    一文帶你了解C#中的協(xié)變與逆變

    這篇文章介紹了C#中協(xié)變和逆變的相關(guān)知識,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • C#使用SQL Dataset數(shù)據(jù)集代碼實例

    C#使用SQL Dataset數(shù)據(jù)集代碼實例

    今天小編就為大家分享一篇關(guān)于的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 淺談C# 中的委托和事件

    淺談C# 中的委托和事件

    本篇文章主要介紹C# 中的委托和事件,委托和事件在 .Net Framework中的應(yīng)用非常廣泛,有興趣的可以了解一下。
    2016-12-12
  • C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫中讀取頭像

    C# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫中讀取頭像

    C#提供的PictureBox控鍵默認(rèn)情況下是方形的非常大的影響美觀,怎么解決這一問題呢?下面小編給大家?guī)砹薈# 制作PictureBox圓形頭像框并從數(shù)據(jù)庫中讀取頭像的操作代碼,感興趣的朋友一起學(xué)習(xí)下吧
    2021-08-08
  • C#使用反射機(jī)制實現(xiàn)延遲綁定

    C#使用反射機(jī)制實現(xiàn)延遲綁定

    這篇文章介紹了C#使用反射實現(xiàn)延遲綁定的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C# WPF 父控件通過使用可視化樹找到子控件的示例代碼

    C# WPF 父控件通過使用可視化樹找到子控件的示例代碼

    這篇文章主要介紹了C# WPF 父控件通過使用可視化樹找到子控件的示例代碼,需要的朋友可以參考下
    2018-08-08
  • c#語言入門類型和成員

    c#語言入門類型和成員

    這篇文章主要介紹了c#語言入門類型和成員,類 是最基本的 C# 類型。 類是一種數(shù)據(jù)結(jié)構(gòu),可在一個單元中就將狀態(tài)和操作結(jié)合起來。 類為類實例提供了定義。類支持繼承和多形性,即派生類 以擴(kuò)展和專門針對基類的機(jī)制,下面來看看文章的詳細(xì)介紹
    2021-12-12
  • C#常用數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array

    C#常用數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array

    這篇文章介紹了C#常用數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組Array,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#調(diào)用百度API實現(xiàn)活體檢測的方法

    C#調(diào)用百度API實現(xiàn)活體檢測的方法

    這篇文章主要給大家介紹了關(guān)于C#調(diào)用百度API實現(xiàn)活體檢測的方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

如皋市| 石景山区| 荥经县| 开封市| 建平县| 蕉岭县| 肇庆市| 手游| 宁德市| 会泽县| 遵义县| 葫芦岛市| 固始县| 澄城县| 嘉定区| 嘉兴市| 卢湾区| 常德市| 炉霍县| 昌图县| 岳西县| 山东省| 湘乡市| 永丰县| 唐河县| 平原县| 林甸县| 武强县| 扶风县| 拉孜县| 榆社县| 青冈县| 镇雄县| 新沂市| 武宣县| 崇信县| 揭西县| 南皮县| 临沧市| 黑山县| 巩义市|