Table是怎样炼成的:Table

本文介绍了一个表(Table)类的设计与实现,重点讲解了表的基本构成:列集合(ColumnCollection)和行集合(RowCollection),并提供了如添加新行、获取变化、清除数据等关键方法。
描述一个数据表

1ExpandedBlockStart.gifContractedBlock.gif/**////<summary>
2InBlock.gif///描述一个数据表
3ExpandedBlockEnd.gif///</summary>

4None.gifpublicclassTable
5ExpandedBlockStart.gifContractedBlock.gifdot.gif{
6InBlock.gif
7InBlock.gifprotectedTable(stringname,ColumnCollectioncols)
8ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
9InBlock.gifTableName=name;
10InBlock.gifColumns=cols;
11InBlock.gifRows=newRowCollection();
12ExpandedSubBlockEnd.gif}

13InBlock.gif
14ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
15InBlock.gif///获取或设置表的列架构
16ExpandedSubBlockEnd.gif///</summary>

17InBlock.gifprotectedreadonlyColumnCollectionColumns;
18ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
19InBlock.gif///获取或设置表的数据行
20ExpandedSubBlockEnd.gif///</summary>

21InBlock.gifprotectedRowCollectionRows;
22ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
23InBlock.gif///获取或设置表的名称
24ExpandedSubBlockEnd.gif///</summary>

25InBlock.gifprotectedreadonlystringTableName;
26InBlock.gif
27ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
28InBlock.gif///将该行数据状态改为RowState.Unchanged
29ExpandedSubBlockEnd.gif///</summary>

30InBlock.gifprotectedvoidAcceptChanges()
31ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
32InBlock.giffor(inti=0;i<=Rows.Count-1;i++)
33ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
34InBlock.gifRows[i].AcceptChanges();
35ExpandedSubBlockEnd.gif}

36ExpandedSubBlockEnd.gif}

37InBlock.gif
38ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
39InBlock.gif///移除所有数据行
40ExpandedSubBlockEnd.gif///</summary>

41InBlock.gifprotectedvoidClear()
42ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
43InBlock.gifthis.Rows.Clear();
44ExpandedSubBlockEnd.gif}

45InBlock.gif
46ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
47InBlock.gif///返回状态匹配的数据行,并以新数据表的形式体现
48InBlock.gif///</summary>
49InBlock.gif///<paramname="rowState"></param>
50ExpandedSubBlockEnd.gif///<returns></returns>

51InBlock.gifprotectedTableGetChanges(RowStaterowState)
52ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
53InBlock.gifTabletmpTable=newTable(rowState.ToString(),this.Columns);
54InBlock.gifforeach(RowrowinRows)
55ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
56InBlock.gifif(row.RowState==rowState)
57ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
58InBlock.giftmpTable.Rows.Add(row);
59ExpandedSubBlockEnd.gif}

60ExpandedSubBlockEnd.gif}

61InBlock.gifreturntmpTable;
62InBlock.gif
63ExpandedSubBlockEnd.gif}

64InBlock.gif
65ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
66InBlock.gif///依据现有的数据表的架构,生成新的数据行
67InBlock.gif///</summary>
68ExpandedSubBlockEnd.gif///<returns></returns>

69InBlock.gifprotectedRowNewRow()
70ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
71InBlock.gifreturnnewRow(Columns,this.TableName);
72ExpandedSubBlockEnd.gif}

73InBlock.gif
74ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
75InBlock.gif///按关键字(数据行的第一列)匹配,并返回符合的数据行
76InBlock.gif///</summary>
77InBlock.gif///<paramname="filterKey"></param>
78ExpandedSubBlockEnd.gif///<returns></returns>

79InBlock.gifprotectedRow[]Select(stringfilterKey)
80ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
81InBlock.gifSystem.Collections.ArrayListtmpRows=newSystem.Collections.ArrayList();
82InBlock.gifforeach(RowrowinRows)
83ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
84InBlock.gifif(row[0].ToString()==filterKey)
85ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
86InBlock.giftmpRows.Add(row);
87ExpandedSubBlockEnd.gif}

88ExpandedSubBlockEnd.gif}

89InBlock.gifreturn(Row[])tmpRows.ToArray(typeof(Row));
90ExpandedSubBlockEnd.gif}

91InBlock.gif
92ExpandedSubBlockStart.gifContractedSubBlock.gif/**////<summary>
93InBlock.gif///打印Table的数据
94ExpandedSubBlockEnd.gif///</summary>

95InBlock.gifpublicvirtualvoidPrint()
96ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
97InBlock.gifSystem.Text.StringBuildersb=newStringBuilder();
98InBlock.gif
99InBlock.gifforeach(Columncolinthis.Columns)
100ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
101InBlock.gifsb.AppendFormat("{0}/t",col.ColumnName);
102ExpandedSubBlockEnd.gif}

103InBlock.gifsb.AppendLine();
104InBlock.gifSystem.Console.WriteLine(sb.ToString());
105InBlock.gifforeach(Rowrowinthis.Rows)
106ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
107InBlock.gifforeach(objectobjinrow.ItemArray)
108ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
109InBlock.gifSystem.Console.Write("{0}/t",obj);
110ExpandedSubBlockEnd.gif}

111InBlock.gifSystem.Console.WriteLine();
112ExpandedSubBlockEnd.gif}

113ExpandedSubBlockEnd.gif}

114ExpandedBlockEnd.gif}

好,到此Table所涉及的5个类都定义实现完毕了。
我们来回顾一下,Table中什么是最基础的,什么是最重要的?
按我们一般来看,表中最重要基础的实行,最重要的是数据。其实表最基础是的架构,架构就是列的定义,而行只不过是列的数据体现形式。
所以Table在构造的时候,必须先定义列的集合,而Row的构造函数是protected internal的,意义是不能在外面被构造,必须通过Table来依据列的定义来构造。

下篇,我们将看到我们对Table的继承,发挥更多OO体现。

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值