C#,入门教程(26)——数据的基本概念与使用方法

 上一篇:

C#,入门教程(25)——注释(Comments)你会吗?看多图演示,学真正注释。icon-default.png?t=N7T8https://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)的基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/125094837

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2575. 找出字符串的可整除数组

2575. 找出字符串的可整除数组 题目链接&#xff1a;2575. 找出字符串的可整除数组 代码如下&#xff1a; class Solution { public:vector<int> divisibilityArray(string word, int m) {vector<int> res;long long num0;for(int i0;i<word.size();i){num(nu…

vue 2 和 vue 3 在自定义组件中如何使用v-model

vue2自定义事件 前言&#xff1a; 众所周知 vue2 中v-model其实就是 :value“val” input“(e) > {val e.target.value}” 的语法糖&#xff0c;所以只要理解了他其实就是语法糖就好处理了 父组件 <template><div><div>父组件</div><Sun v-mo…

基础算法(五)(进制转换)

1.进制的本质 对于一个十进制数字&#xff0c;比如说153&#xff0c;其本质是每一个数位上的数字乘上这一位上的权重&#xff0c;即&#xff1a;153&#xff08;110^2&#xff09;&#xff08;510^1&#xff09;&#xff08;310^0&#xff09; 而二进制&#xff0c;只不过是把…

LVS集群 ----------------(直接路由 )DR模式部署

一、LVS集群的三种工作模式 lvs-nat&#xff1a;修改请求报文的目标IP,多目标IP的DNAT lvs-dr&#xff1a;操纵封装新的MAC地址&#xff08;直接路由&#xff09; lvs-tun&#xff1a;隧道模式 lvs-dr 是 LVS集群的 默认工作模式 NAT通过网络地址转换实现的虚拟服务器&…

在分布式环境中使用状态机支持数据的一致性

简介 在本文中&#xff0c;我们将介绍如何在分布式系统中使用transaction以及分布式系统中transaction的局限性。然后我们通过一个具体的例子&#xff0c;介绍了一种通过设计状态机来避免使用transaction的方法。 什么是数据库transaction Transaction是关系型数据普遍支持的…

java SSM流浪宠物救助与领养myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM流浪宠物救助与领养管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系…

安卓Java面试题21-30

🔥 21、AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?🔥 AsyncTask 运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,或者在操作过程中对主线程的UI进行更新。 缺陷: AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还…

Fragment

1.网格视图(随便插进来一条) 2.Fragment

谷歌开源的LLM大模型 Gemma 简介

相关链接&#xff1a; Hugging face模型下载地址&#xff1a;https://huggingface.co/google/gemma-7bGithub地址&#xff1a;https://github.com/google/gemma_pytorch论文地址&#xff1a;https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf官方博客&…

Linux——文件标识符

目录 一、文件基础 二、常见的C语言文件接口 三、系统文件接口 四、理解语言与系统文件操作的关系 五、如何理解一切皆文件 六、文件标识符再理解 一、文件基础 一个空文件&#xff0c;也会占用磁盘空间&#xff0c;这是因为文件不仅仅有存放在里面的内容&#xff0c;还…

IO:实现文件拷贝的各种方法(观察每种函数中的参数和结束条件)

一、使用fscanf实现&#xff0c;将一个文件中的数据打印到终端上&#xff08;类似于cat一个文件&#xff09; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat…

数组中删改元素(数据结构、顺序表、线性表)

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

Chapter20-Ideal gases-CIE课本要点摘录、总结(编辑中)

20.1 Particles of a gas Brownian motion Fast modules 速率的数值大概了解下&#xff1a; average speed of the molecules:400m/s speed of sound:approximately 330m/s at STP&#xff08;standard temperature and pressure&#xff09; Standard Temperature and Pres…

ROS 2基础概念#5:执行器(Executor)| ROS 2学习笔记

在ROS 2中&#xff0c;Executor是一个核心概念&#xff0c;负责管理节点&#xff08;Node&#xff09;中的回调函数&#xff0c;如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调&#xff0c;从而在ROS 2系统中实现异步编程。 ROS 2 …

linux循环之until循环

1.until循环语法 until 循环控制条件 do commands done #until循环是在循环的顶部判断“循环控制条件”&#xff0c;如果“循环控制条件”一直为FALSE&#xff0c;那么就一直循环下去&#xff0c;这个与while循环刚好相反 2.until循环案例 [rootkibana ~]# cat until.sh…

七彩虹八渐变 外贸建站公司wordpress模板

进出口水果wordpress外贸模板 漂亮水果wordpress外贸模板&#xff0c;做水果进出品生意的外贸公司自建站官网模板。 https://www.jianzhanpress.com/?p3516 玩具wordpress外贸模板 简洁玩具wordpress外贸模板&#xff0c;适合做跨境电商外贸公司使用的wordpres外贸s网站主题…

FPGA 按键控制串口发送

按键消抖 消抖时间一般为10ms&#xff0c;我使用的板子是ACX720&#xff0c;晶振为50MHZ&#xff0c;20ns为一周期。 状态机 模块设计 设计文件 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2023/01/11 12:18:36 // Design Name: // Module Name…

IPv6扩展头(一)——逐跳选项头(Hop-by-Hop Options Header)

逐跳选项头&#xff08;Hop-by-Hop Options Header&#xff09;是IPv6协议中的一种扩展头部&#xff0c;它允许在数据包传输过程中每个跃点&#xff08;路由器或节点&#xff09;都能够读取并处理该头部中的信息。逐跳选项头的设计初衷是为了提供一种机制&#xff0c;在整个传输…

(学习总结)如何使用ChatGPT API训练自定义知识库

第一步&#xff1a; 安装OpenAI、GPT Index、PyPDF2和Gradio库 pip install openai pip install gpt_index pip install PyPDF2 pip install gradio 第二步&#xff1a;用VScode代码编辑器写app.py代码 记得替换api密钥 from llama_index import SimpleDirectoryReader, …

纯css实现太极八卦图

感觉最近好像闯鬼了&#xff0c;赶紧写个八卦图避避邪&#xff0c;开玩笑了&#xff0c;不废话&#xff0c;上菜&#xff0c;看效果上代码。 效果 代码&#xff0c;你们都是大佬&#xff0c;这里就不解释代码了 &#xff08;hover会转动喔&#xff09;。 <!DOCTYPE html&g…