2010-09-01 68 views
0

说我有1000个随机日期的列表,称之为L存储日期,哪个结构? C#

我不认为C#有一个“树”的收集,所以我想知道如何实现以下内容:

树将是3个阶段深,第一阶段包含年份,下一阶段包含父母年份L中的所有月份,最后阶段包含“父”月份和“祖父母”年份中的所有天数。

应该使用什么类型的集合,或者我可以只使用嵌套数组?

+0

为什么不使用'名单'? – knittl 2010-09-01 10:51:29

+0

考虑C5 .net库http://www.itu.dk/research/c5/ – kenny 2010-09-01 10:52:07

+4

你需要什么类型的集合取决于你想要对这些日期做什么。 – LukeH 2010-09-01 10:55:07

回答

2

我没有测试的代码,但你应该能够做这样的事情:

class Container 
{ 
    public Container() { Items = new Dictionary<int, Container>(); } 
    public DateTime DateTime {get;set;} 
    Dictionary<int, Container> Items {get;set;} 
} 

Dictionary<int, Container> items = new Dictionary<int, Container>(); 

foreach (var date in theListCalledL) 
{ 
    Container yearContainer; 
    if (!items.TryGetValue(date.Year, out yearContainer)) 
    { 
     yearContainer = new Contanier{DateTime = date}; 
     items.Add(date.Year, yearContainer); 
    } 

    Container monthContainer; 
    if (!yearContainer.Items.TryGetValue(date.Month, out monthContainer)) 
    { 
     monthContainer = new Contanier{DateTime = date}; 
     yearContainer.Add(date.Month, monthContainer); 
    } 

    Container dayContainer; 
    if (!monthContainer.Items.TryGetValue(date.Day, out dayContainer)) 
    { 
     dayContainer = new Contanier{DateTime = date}; 
     monthContainer.Add(date.Day, dayContainer); 
    } 
} 

//and to get items: 
var container = items[1997][8][10]; 
Console.WriteLine("The date was: " + contanier.DateTime); 

var tmp = items[1997]; 
Console.WriteLine("1997 has items for " + tmp.Items.Count + " months."); 
0

如何

Dictionary<int, Dictionary<int, HashSet<int>>> dateTree; 

不过说真的,跟了知道你需要如何使用它,我们不能雷尔帮助。你能给我们提供更多关于你为什么要这样存储日期的信息吗?