欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C#,入门教程 (26) - 数据的基本概念和用法

最编程 2024-03-08 16:29:08
...

 上一篇:

C#,入门教程(25)——注释(Comments)你会吗?看多图演示,学真正注释。https://blog.****.net/beijinghorn/article/details/124681888

本文所述的知识基本上适用于C/C++,java等其他语言。

数据是程序的基础,算法是程序的栋梁。

徒弟们交作业的之后,一般都会有BUG,而大多数情况下,往往不是算法的错误,而是数据的错误,很低级的错误。天下算法一大抄,差不了哪儿去,能蒙事情过关。而数据的错误,程序员自己却往往不能发现。

本文仅仅叙述一点数据的使用方法,不能解决太多的问题。本文也不是什么强文,不过是一点笔记。下面的论述是极为简单的,仅仅适用于最最入门者阅读,稍有基础者可掠过!

第一场 平淡无奇的办公室

先看一段原始的数据使用场景,整数:

int va = 10;
int vb = va;
sb.AppendLine("整数(int)开始(浮点数等一样)<br>");
sb.AppendLine("va=" + va + "<br>");
sb.AppendLine("vb=" + vb + "<br>");
vb = 20;
sb.AppendLine("vb=20之后:<br>");
sb.AppendLine("va=" + va + "<br>");
sb.AppendLine("vb=" + vb + "<br>");

计算结果:

整数(int)开始(浮点数等一样)
va=10
vb=10
vb=20之后:
va=10
vb=20

再看字符串的情况:

string vc = "string cccc";
string vd = vc;
sb.AppendLine("<hr>");
sb.AppendLine("字符串(String)开始<br>");
sb.AppendLine("vc=" + vc + "<br>");
sb.AppendLine("vd=" + vd + "<br>");

vd = "string d";
sb.AppendLine("d=\"string d\"之后<br>");
sb.AppendLine("vc=" + vc + "<br>");
sb.AppendLine("vd=" + vd + "<br>");

计算结果:

字符串(String)开始
vc=string cccc
vd=string cccc
d="string d"之后
vc=string cccc
vd=string d

以上的程序,结果都符合你的预期?当然。

可以这么理解:

va ,vb 是两间办公室,分别有各自的钥匙。

va 办公室的桌上分别放了 10元。vb = va ,是说 vb 办公室与 va 办公室一样,也放了 10 元。

vb = 20 ,是说 vb 桌上 10元拿走了,改放了 20 元(这就是赋值!)。

字符串的操作,在计算机内部,实际上与整数的操作完全不同,不过 C# 编译器为了大家的方便,让大家使用起来与 int 一样。这是 C# 比 C/C++ 开发效率更高的原因之一。

第二场 有两张桌子的办公室

数组!数组!

这次办公室内有两张桌子。一开始分别放了100元,200元。

int[] ve = new int[2] { 100, 200 };
int[] vf = ve;
sb.AppendLine("<hr>");
sb.AppendLine("数组(Array)开始<br>");
sb.AppendLine("ve=" + ve[0] + "," + ve[1] + "<br>");
sb.AppendLine("vf=" + vf[0] + "," + vf[1] + "<br>");

vf[1] = 300;
sb.AppendLine("vf[1]=300之后<br>");
sb.AppendLine("ve=" + ve[0] + "," + ve[1] + "<br>");
sb.AppendLine("vf=" + vf[0] + "," + vf[1] + "<br>");

请问:这段程序执行之后,房间ve 内,第二张桌子上有多少钱?也就是 ve[1] 的数据是多少?

选择题:( )200元?( )300元?( )100元?

看答案:

数组(Array)开始
ve=100,200
vf=100,200
vf[1]=300之后
ve=100,300
vf=100,300

这个事得这么理解:

ve 是新创建的办公室,有两张桌子,分别放了 100 元,200元。

vf = ve ;等于是给你 ve 的另外一把钥匙。

vf[1] = 300 ,说,进去之后,第二个桌上拿走了 200元,放了 300 元。

这里的关键是:(1)只有一个办公室,不像前面是两个不同的办公室;(2)vf 只是一把钥匙!

徒弟们屡屡在这样的情况下内犯错误,无语。

同样的情况,同样适用于  List Stack Queue 等等各种数据集 Collections。

List<int> vg = new List<int>();
vg.Add(400);
vg.Add(500);
List<int> vh = vg;
sb.AppendLine("<hr>");
sb.AppendLine("列表List开始<br>");
sb.AppendLine("vg=" + vg[0] + "," + vg[1] + "<br>");
sb.AppendLine("vh=" + vh[0] + "," + vh[1] + "<br>");
vh[1] = 600;
sb.AppendLine("vh[1]=600之后<br>");
sb.AppendLine("vg=" + vg[0] + "," + vg[1] + "<br>");
sb.AppendLine("vh=" + vh[0] + "," + vh[1] + "<br>");

计算结果:

列表List开始
vg=400,500
vh=400,500
vh[1]=600之后
vg=400,600
vh=400,600

第三场 独立的办公室

谁都喜欢独立的办公室。

这么办:

List<int> vk = new List<int>(vg);
sb.AppendLine("<hr>");
sb.AppendLine("新列表List vk<br>");
vk[1] = 700;
sb.AppendLine("vg=" + vg[0] + "," + vg[1] + "<br>");
sb.AppendLine("vk=" + vk[0] + "," + vk[1] + "<br>");

List<int> vs = new List<int>();
foreach (int vi in vg) vs.Add(vi);
sb.AppendLine("<hr>");
sb.AppendLine("新列表List vs<br>");
vs[1] = 800;
sb.AppendLine("vg=" + vg[0] + "," + vg[1] + "<br>");
sb.AppendLine("vs=" + vs[0] + "," + vs[1] + "<br>");

计算结果:

新列表List vk
vg=400,600
vk=400,700


新列表List vs
vg=400,600
vs=400,800

记住了,关键是 new !

List<int> vk = new List<int>(vg); 

等于克隆 Clone 

List<int> vs = new List<int>();
foreach (int vi in vg) vs.Add(vi);

也是克隆 Clone

只有是新开的、有独立钥匙(地址)的办公室,才是你的独立办公室!

C#,入门教程(27)——应用程序(Application)的基础知识https://blog.****.net/beijinghorn/article/details/125094837