上一篇:
C#,入门教程(25)——注释(Comments)你会吗?看多图演示,学真正注释。https://blog.csdn.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.csdn.net/beijinghorn/article/details/125094837