C#,入门教程(26)——数据的基本概念与使用方法
上一篇:
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
相关文章:

C#,入门教程(26)——数据的基本概念与使用方法
上一篇: C#,入门教程(25)——注释(Comments)你会吗?看多图演示,学真正注释。https://blog.csdn.net/beijinghorn/article/details/124681888 本文所述的知识基本上适用于C/C,java等其他语言。 …...

加密与安全_PGP、OpenPGP和GPG加密通信协议
文章目录 PGPOpenPGPGPG工作原理工作流程用途案例说明过程 代码实现pom依赖PgpEncryptionUtilPgpDecryptionUtilCommonUtilsPgpEncryptionTest 小结 PGP PGP (Pretty Good Privacy) 是一种加密通信协议,用于保护电子邮件和文件的安全性和隐私。它通过使用加密、数字…...
Maven模块化最佳实践
一,模块化的原因及意义 模块化是一种将大型的软件系统拆分成相互独立的模块的方法。具有以下优势: 代码复用:不同的模块可以共享相同的代码。这样可以避免重复编写相同的代码,提高开发效率。 模块独立性:每个模块都可…...

嵌入式C语言中 #pragma once 的作用
1、#pragma once有什么作用? 为了避免同一个头文件被包含(include)多次,C/C中有两种宏实现方式: 一种是#ifndef方式; 另一种是#pragma once方式。 在能够支持这两种方式的编译器上,二者并没…...

spring-cloud-openfeign 3.0.0(对应spring boot 2.4.x之前版本)之前版本feign整合ribbon请求流程
在之前写的文章配置基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 下图为自己整理的...

#数据结构 线性表的顺序存储
目录 每日文案 一、线性表的定义 二、线性表的操作 顺序表的存储结构 顺序表的初始化操作 判断顺序表是否为空表 将顺序表置为空表 计算顺序表中的元素个数 取出顺序表中的对应位置元素 取出对应数值的位序 在对应位置插入元素 将对应位置的元素删除 将顺序表中的数据…...

[iOS]高版本MacOS运行低版本Xcode
Xcode 版本支持文档 目的: 在MacOS Sonoma 系统上安装 Xcode14.3.1 第一步 先在Xcode下载一个Xcode14.3.1的压缩包 第二步 本地解压Xcode,将外层目录名变更为Xcode_14.3.1,将文件拷贝到 /Applications目录下。 第三步 变更xcode-sel…...

仿牛客项目Day5:开发登录、退出功能
登录功能 数据库 创建了一个表login_ticket来记录登录凭证,类似于session 核心字段是ticket entity 创建了一个类loginTicket mapper 处理login_ticket的mapper接口层,用来往里面查询数据、增加数据和修改数据 查询数据通过ticket来查 select是通…...

Vue3全家桶 - Vue3 - 【3】模板语法(指令+修饰符 + v-model语法糖)
一、模板语法 主要还是记录一些指令的使用和vue2的区别;vue3指令导航; 1.1 v-text 和 v-html 指令的区别: v-text: 更新元素的文本内容;v-text 通过设置元素的 textContent 属性来工作,因此它将覆盖元素…...

OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136616551 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿)的博…...

2024蓝桥杯每日一题(时间日期)
一、第一题:日期差值 解题思路:模拟 写一个计算时间的板子两者相减 【Python程序代码】 mon [0,31,28,31,30,31,30,31,31,30,31,30,31] def pd(x):if x%4000 or (x%40 and x%100!0):return Truereturn False def get_day(y,m,d):res 0for i …...
js【详解】事件
给 DOM 节点绑定事件 推荐使用 addEventListener 函数 第一个参数:事件名称第二个参数:事件处理函数(第一个参数为 event)第三个参数: true 采用捕获法来处理事件false 【推荐】采用冒泡法来处理事件 let div1 docu…...
webpack5基础--14_优化css
Css 处理 提取 Css 成单独文件 Css 文件目前被打包到 js 文件中,当 js 文件加载时,会创建一个 style 标签来生成样式 这样对于网站来说,会出现闪屏现象,用户体验不好 我们应该是单独的 Css 文件,通过 link 标签加载…...

Skywalking(9.7.0) 告警配置
图片被吞,来这里看吧:https://juejin.cn/post/7344567669893021736 过年前一天发版,大家高高兴兴准备回家过年去了。这时候老板说了一句,记得带上电脑,关注用户反馈。有紧急问题在高速上都得给我找个服务区改好。 但是…...
删除、创建、验证Kafka安装自带的__consumer_offsets topic
删除Kafka自带Topic 一般情况下,你删除Kafka自带的__consumer_offsets topic,会报错提示不能删除。 倔强的你直接找到zookeeper删掉了它,list查看确实没有这个topic了,但是这会导致消费者和偏移量无法记录。 创建Kafka自带的Topi…...

在文件夹下快速创建vue项目搭建vue框架详细步骤
一、首先在你的电脑目录下新建一个文件夹 进入该文件夹并打开控制台(输入cmd指令) 进入控制台后输入 vue create springboot_vue (自己指定名称) 如果出现这类报错如:npm install 的报错npm ERR! network request to http://registry.cnp…...

蓝桥杯倒计时 36天-DFS练习
文章目录 飞机降落仙境诅咒小怂爱水洼串变换 飞机降落 思路:贪心暴搜。 #include<bits/stdc.h>using namespace std; const int N 10; int t,n; //这题 N 比较小,可以用暴力搜搜复杂度是 TN*N! struct plane{int t,d,l; }p[N]; bool vis[N];//用…...

ctfshow web入门 php特性总结
1.web89 intval函数的利用,intval函数获取变量的整数值,失败时返回0,空的数组返回,非空数组返回1 num[]1 intval ( mixed $var [, int $base 10 ] ) : int Note: 如果 base 是 0,通过检测 var 的格式来决定使用的进…...

Media Encoder 2024:未来媒体编码的新纪元 mac/win版
随着科技的飞速发展,媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求,Media Encoder 2024应运而生,它凭借卓越的技术和创新的特性,重塑了媒体编码的未来。 Media Encoder 2024 mac/w…...
2024年AI辅助研发趋势:数智时代革新新引擎
随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面,而在软件开发领域,AI辅助研发正成为一股不可忽视的力量。本文将探讨2024年AI辅助研发的趋势,以及它如何成为数智时代革新的新引擎。 AI辅助研…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...