c#类型转换和常见集合类型

目录

1. 整数转换,整数和字符串,字符串和整数之间的转换怎么实现?

2. 日期转换,获取当前日期,字符串转日期,日期转字符串怎么实现?

3. 举例一维、二维、三维数组

4. 需求:有个88笔费用记录,总额3亿,金额在300万~800万之间,随机数如何实现?并记录总耗时

5. 简述常见的集合类型的存储结构和它们的作用以及优缺点,并写出实现案例

1)List

2)Array

3)ArrayList

4)LinkedList


1. 整数转换,整数和字符串,字符串和整数之间的转换怎么实现?

字符串转整型:

1)使用int.Parse()方法:这个方法尝试将字符串参数转换为整数。如果字符串不是有效的整数表示,则会抛出FormatException。如果字符串表示的数字超出了int类型的范围,则会抛出OverflowException

2)Convert.ToInt32(str) 方法用于将字符串(str)转换为32位整数(int)。如果字符串str包含的是一个有效的整数值(在int类型的范围内),那么这个方法会成功地将它转换为int类型。如果字符串不是一个有效的整数值,或者其表示的数值超出了int类型的范围,那么这个方法会抛出异常。

string str = "123";
//第一种方式
int a = int.Parse(str);
Console.WriteLine(a + 10);
//Console.WriteLine("123"+2);
//Console.WriteLine(123+2);
//第二种方式
int b = Convert.ToInt32(str);
Console.WriteLine(b + 1);

整型转字符串,有两种方式:

1)任何类型与字符串连接,结果都是字符串

2)使用ToString()方法:这是将整数转换为字符串的最直接方法

int n = 123;
//第一种方式:任何类型与字符串连接,结果都是字符串
Console.WriteLine(""+n);
//第二种方式
Console.WriteLine(Convert.ToString(n));

2. 日期转换,获取当前日期,字符串转日期,日期转字符串怎么实现?

字符串转日期:将字符串转换为DateTime类型,可以使用DateTime.ParseDateTime.TryParse(后者更安全,因为它不会抛出异常)。

string s = "2024-07-04 09:49:03";
DateTime dt = DateTime.Parse(s);
Console.WriteLine(dt.ToString());

获取当前日期:可以使用DateTime.Now来获取当前的日期和时间(包括时、分、秒等)。

DateTime currentDateTime = DateTime.Now;
Console.WriteLine(currentDateTime.ToString());

日期转字符串:将DateTime对象转换为字符串,可以使用ToString方法,并可选地指定一个格式字符串。

DateTime dt2 = new DateTime(2024, 7, 4, 9, 51, 09);
Console.WriteLine(dt2.ToString());DateTime dt3 = new DateTime(2024, 10, 11);
Console.WriteLine(dt3.ToString());Console.WriteLine(dt.Year.ToString());
Console.WriteLine(dt.Month.ToString());
Console.WriteLine(dt.Day.ToString());

3. 举例一维、二维、三维数组

在C#中,数组是一种数据结构,用于在内存中连续存储相同类型的数据。数组可以有多个维度,常见的一维、二维和三维数组分别用于存储线性、矩阵和三维空间中的元素。

一维数组:

一维数组是最简单的数组形式,它像一个列表,可以存储一系列的元素。

//声明数组,值类型都有默认值
int[] a1 = new int[3];
for (int i = 0; i < a1.Length; i++)
{a1[i] = i;
}
for (int i = 0; i < a1.Length; i++)
{Console.Write(a1[i]+" ");
}
Console.WriteLine();
//声明时,同时进行初始化
int[] a2 = new int[3] {1,2,3};
foreach (int i in a2)
{Console.Write(i+" "); 
}
Console.WriteLine();int[] a3 = { 1, 2, 3 };
foreach (int i in a3)
{Console.Write(i + " ");
}
Console.WriteLine()

二维数组:

二维数组用于存储矩阵或表格中的数据,每个元素由两个索引(行和列)来访问。

//声明一个二维数组(静态数组)
int[] a1 = { 1, 2, 3, 4, 5, 6 };
//声明一个两行,三列的二维数组
int[,] a2 = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
//修改某个值
a2[0, 1] = 200;
//获取某维度的长度,不是总的长度,GetLength(n维度),维度从0开始
for (int i = 0; i < a2.GetLength(0); i++)
{for (int j = 0; j < a2.GetLength(1); j++){Console.Write(a2[i,j] + " "); }Console.WriteLine();
}

三维数组:

三维数组用于存储三维空间中的数据,如立方体中的值,每个元素由三个索引(通常是x, y, z)来访问。

//声明一个三维数组
int[,,] a3 = new int[2, 2, 2]
{{{1,2}, {3,4}},{{5,6},{7,8}}};
a3[0, 0, 0] = 100;
a3[1, 1, 1] = 999;for (int i = 0; i < a3.GetLength(0); i++)
{for (int j = 0; j < a3.GetLength(1); j++){for (int k = 0; k < a3.GetLength(2); k++){Console.Write(a3[i,j,k] + " ");}Console.WriteLine();}Console.WriteLine();
}

4. 需求:有个88笔费用记录,总额3亿,金额在300万~800万之间,随机数如何实现?并记录总耗时

想要生成一个包含88笔费用记录的数组,总额需要达到3亿,且每笔金额在300万到800万之间(包括300万和800万),可以使用Random类来生成随机数,并使用循环来构建数组。同时,可以使用Stopwatch类来记录整个过程的总耗时。

using System;
using System.Diagnostics;class Program
{static void Main(string[] args){Stopwatch stopwatch = Stopwatch.StartNew();Random random = new Random();int totalRecords = 88;long totalAmountNeeded = 300000000; // 3亿  long[] expenses = new long[totalRecords];long currentTotal = 0;// 初步分配费用,尽量平均分配  for (int i = 0; i < totalRecords - 1; i++){// 为了避免最后一笔费用过小,我们可以先计算一个平均金额,然后在此基础上加上或减去一个随机数  long average = totalAmountNeeded / totalRecords;// 允许一定的波动,但不超过平均金额的10%  long fluctuation = random.Next((int)-(average / 10), (int)((average / 10) + 1)); long amount = average + fluctuation;// 确保金额在合理范围内  amount = Math.Max(3000000, Math.Min(amount, 8000000));expenses[i] = amount;currentTotal += amount;}// 计算最后一笔费用,确保总额达到或稍微超过3亿  long lastAmount = totalAmountNeeded - currentTotal;// 如果最后一笔费用小于最小金额,则将其设置为最小金额  expenses[totalRecords - 1] = Math.Max(3000000, lastAmount);stopwatch.Stop();// 输出总耗时  Console.WriteLine($"总耗时: {stopwatch.ElapsedMilliseconds} 毫秒");// 输出费用数组  foreach (var expense in expenses){Console.Write(expense +"  ");}// 验证总额long actualTotal = 0;foreach (var expense in expenses){actualTotal += expense;}Console.WriteLine($"总金额: {actualTotal}");}
}

运行后的结果如图:

5. 简述常见的集合类型的存储结构和它们的作用以及优缺点,并写出实现案例

1)List<T>
  • 存储结构:基于数组实现,支持动态扩容。
  • 作用:用于存储元素的序列,支持随机访问。
  • 优点:访问速度快(通过索引访问),支持动态扩容。
  • 缺点:在列表中间插入或删除元素时效率较低,因为需要移动其他元素。
//<>泛型,编译器编译时可以进行类型的检查
List<int> list = new List<int>();
list.Add(100);
//list.Add("200"); //泛型在编译时就进行类型的检查,防止运行时报错
list.Add(200);
list.Add(300);
list.Add(900);
list.Add(400);Console.WriteLine("容量:{0}",list.Capacity);
Console.WriteLine("元素的个数:{0}",list.Count);
list.Remove(200);
list.RemoveAt(1);
list.Sort();
foreach (int item in list)
{Console.WriteLine(item);
}
2)Array
  • 存储结构:固定大小的连续内存块。
  • 作用:用于存储固定数量的同类型元素,支持随机访问。
  • 优点:访问速度快,因为元素在内存中是连续的。
  • 缺点:大小固定,不支持动态扩容。
int[] numbers = new int[3] { 1, 2, 3 };  
Console.WriteLine(numbers[1]); // 输出 2
3)ArrayList
  • 存储结构:ArrayList是一个非泛型集合,内部通过动态数组实现,可以存储不同类型的对象。
  • 作用:ArrayList在泛型集合出现之前广泛使用,用于存储和操作动态数组的元素。
  • 优点(相较于List<T>):可以存储不同类型的对象。
  • 缺点
    • 性能开销:由于需要存储不同类型的对象,可能存在内存分配和类型转换的性能开销。
    • 强制类型转换:访问元素时需要进行类型转换,增加了出错的可能性。
ArrayList arrayList = new ArrayList();
//添加一个元素
arrayList.Add(700);
arrayList.Add(200);
arrayList.Add(300);
arrayList.Add(800);
//超过申请的内存空间,翻倍(自动扩容,扩容策略:翻倍,2的倍数)
arrayList.Add(500);
//删除元素
arrayList.Remove(100);//代码的容错性
arrayList.RemoveAt(0); //索引值来删除
arrayList.RemoveAt(0); //索引值来删除Console.WriteLine("动态数组的容量:{0}", arrayList.Capacity);
Console.WriteLine("动态数组的元素的个数:{0}", arrayList.Count);arrayList.Sort(); //排序:从小到大
arrayList.Clear(); //清空foreach (int item in arrayList)
{Console.WriteLine(item);
}
4)LinkedList<T>
  • 存储结构:由一系列节点组成,每个节点包含数据和指向列表中下一个节点的引用(双向链表还包含指向前一个节点的引用)。
  • 作用:在不需要快速随机访问元素的情况下,提供高效的插入和删除操作。
  • 优点
    • 插入和删除操作高效,特别是在列表的开始或结束位置。
    • 不需要像数组那样在添加或删除元素时移动其他元素。
  • 缺点
    • 索引访问元素的速度相对较慢,需要从头或尾开始遍历。
    • 占用内存比数组多,因为每个节点都需要额外的存储来保存指向其他节点的引用
LinkedList<string> linkedList = new LinkedList<string>();
linkedList.AddFirst("陈晨");
linkedList.AddFirst("陈希");
linkedList.AddFirst("陈冲");linkedList.AddLast("陈川");linkedList.Remove("陈晨");
linkedList.Remove("陈晨");var node  = linkedList.Find("陈冲");
Console.WriteLine("当前节点的值:{0}",node.Value);
foreach (string linked in linkedList)
{Console.WriteLine(linked);
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

07浅谈大语言模型可调节参数tempreture

浅谈temperature 什么是temperature&#xff1f; temperature是大预言模型生成文本时常用的两个重要参数。它的作用体现在控制模型输出的确定性和多样性&#xff1a; 控制确定性&#xff1a; temperature参数可以控制模型生成文本的确定性&#xff0c;大部分模型中temperatur…

《C++20设计模式》命令模式思考

文章目录 一、前言二、分析 拆解1、经典命令模式2、撤销操作3、关于Invoker类 三、实现 一、前言 哎&#xff01;只要是书上写的和经典设计模式不同&#xff0c;我就会很伤脑筋。&#x1f629; 命令模式到底是干什么的&#xff1f; 答&#xff1a;命令的发送者和接收者完全解…

SQLServer的系统数据库用别的服务器上的系统数据库替换后做跨服务器连接时出现凭证、非对称金钥或私密金钥的资料无效

出错作业背景&#xff1a; 公司的某个sqlserver服务器要做迁移&#xff0c;由于该sqlserver服务器上数据库很多&#xff0c;并且做了很多的job和维护计划&#xff0c;重新安装的sqlserver这些都是空的&#xff0c;于是就想到了把系统4个系统数据库进行替换&#xff0c;然后也把…

应用在灯带Type-C接口上的PD SINK协议芯片ECP5701/ECP5702获取充电器的5V、9V、12V、15V、20V供电

方案背景 近日&#xff0c;欧盟就统一充电器接口的提案达成了一项政治协议&#xff0c;其中规定了在欧盟地区销售的所有手机或其他便携式中小型电子设备必须采用统一的USB Type-C接口。这项决定意味着未来将会有更多的产品强制性地使用TYPE-C充电接口。 在这个背景下&#xf…

算法设计与分析 实验5 并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、实验内容 &#xff08;一&#xff09;基准算法 &#xff08;二&#xff09;高效算法 五、实验结论 一、实验目的 1. 掌握图的连通性。 2. 掌握并查集的基本原理和应用。 二、问题描述 在图论中&#xff0c;一条边被称…

剑指西门子ABB施耐德,中国自动化公司杀入全球市场,业绩增长90%

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 更多的海量【智能制造】相关资料&#xff0c;请到智能制造online知识星球自行下载。 一提到工业自动化领域&#xff0c;西门子、施耐德、ABB这些…

vue-使用Worker实现多标签页共享一个WebSocket

文章目录 前言一、SharedWorker 是什么SharedWorker 是什么SharedWorker 的使用方式SharedWorker 标识与独占 二、Demo使用三、使用SharedWorker实现WebSocket共享 前言 最近有一个需求&#xff0c;需要实现用户系统消息时时提醒功能。第一时间就是想用WebSocket进行长连接。但…

植物神经紊乱小救星来啦!放松小技巧get√

哈喽&#xff0c;小伙伴们&#xff01;今天给大家带来一些超级实用的放松小技巧&#xff0c;特别适合那些时常感到植物神经紊乱&#xff0c;心情紧绷的亲人们哦&#xff01;&#x1f478; &#x1f340;首先&#xff0c;深呼吸大法&#xff01;每次感到紧张或者焦虑的时候&…

小试牛刀-Python生成solana Wallet公私钥

目录 1.编写目的 2.使用依赖 3.实现方法 3.1 Pynacl实现 3.2 ed25519实现 1.编写目的 在使用Python开发solana应用过程中,需要生成solana Wallet公私钥,以实现后续应用操作.这里将Python生成方法进行整理,方便日后的查阅,也能帮助到实现相关功能的朋友。 2.使用依赖 主要…

(十四)向量和矩阵

向量 标量&#xff1a;比如质量/温度/颜色等&#xff0c;没有方向&#xff0c;只有大小的量&#xff0c;称为标量 向量&#xff1a;拥有方向跟大小的物理量/数学量为向量&#xff0c;比如力/速度 向量特性&#xff1a; 1.向量有方向&#xff0c;没有位置 2.向量有大小&#x…

Linux的前世今生

Unix的起源和发展 1969年&#xff0c;AT&T贝尔实验室的Ken Thompson和Dennis Ritchie等人开发了Unix操作系统。Unix的设计理念强调小而简洁的工具&#xff0c;文本流和系统模块化&#xff0c;这些理念后来成为Linux开发的重要基础。1973年&#xff0c;Unix用C语言重新编写…

Angular进阶之九: JS code coverage是如何运作的

环境准备 需要用到的包 node 18.16.0# Javascript 代码编辑"babel/core": "^7.24.7","babel/preset-env": "^7.24.7","babel-loader": "^9.1.3",# 打包时使用的 module&#xff0c; 给代码中注入新的方法# http…

MySQL如何实现数据排序

根据explain的执行计划来看&#xff0c;MySQL可以分为索引排序和filesort 索引排序 如果查询中的order by字句包含的字段已经在索引中&#xff0c;且索引的排列顺序和order by子句一致&#xff0c;则可直接利用索引进行排序&#xff0c;由于索引有序&#xff0c;所以排序效率…

HTML5实现我的音乐网站源码

文章目录 作者&#xff1a;[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…

合合信息大模型“加速器”重磅上线

大模型技术的发展和应用&#xff0c;预示着更加智能化、个性化未来的到来。如果将大模型比喻为正在疾驰的科技列车&#xff0c;语料便是珍贵的“燃料”。本次世界人工智能大会期间&#xff0c;合合信息为大模型打造的“加速器”解决方案备受关注。 在大模型训练的上游阶段&…

AI工具,如何通过 GPT-4o 提高工作效率

文章目录 引言一、理解GPT-4o及其功能二、如何利用GPT-4o提高工作效率1. 代码生成与优化2. 自动化测试与调试3. 技术文档撰写与知识管理 三、实际案例与成功应用1. GitHub 协作与问题解决2. 敏捷开发与迭代优化 四、GPT-4o的挑战与应对策略五、未来展望与发展方向六、结论 &…

软件产品常见推广渠道

软件产品常见推广渠道&#xff0c;文字越少越重要

【机器学习】分类算法-KNN算法实现

一、前言 最近&#xff0c;在学习机器学习相关的内容&#xff0c;就想着能不能跑一些机器学习的Demo,这样更方便后期的学习&#xff0c;于是在B站上&#xff0c;找了一个Up主【abilityjh】的视频&#xff0c;跟着学&#xff0c;跟着敲代码&#xff0c;自己在博客上将学的东西&a…

视频压缩软件哪个压缩最小,视频用什么软件压缩最小

在数字媒体时代&#xff0c;视频内容的生产与分享已成为生活常态。但随之而来的问题就是&#xff0c;大视频文件占用过多存储空间&#xff0c;上传和分享也变得不便。本文将为你揭示如何将视频压缩到最小&#xff0c;同时保持画质清晰。让我们一起探索吧&#xff01; 下载并文件…

ICC2:如何设置route_auto只绕线一轮?

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 星球小伙伴提问&#xff0c;如何设置route_auto只绕线一轮&#xff0c;想看一下short分布。 这个方法分两步: 关掉redundant via优化 set_app_options -name route.common.po…