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.mzph.cn/news/868245.shtml

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

相关文章

事务(数据库)

是一组操作的集合&#xff0c;是一个不可分割的工作单位&#xff0c;事物会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败 create table account(id int auto_increment primary key comment 主键ID,name va…

VPN 的入门介绍

VPN&#xff08;虚拟专用网络&#xff09; 简介 虚拟专用网络&#xff0c;简称虚拟专网&#xff08;VPN&#xff09;&#xff0c;其主要功能是在公用网络上建立专用网络&#xff0c;进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实…

14-48 剑和诗人22 - RAG 的主要痛点和解决方案

​​​​​ 检索增强生成 (RAG) 模型已成为一种有前途的方法&#xff0c;它利用存储在文档中的外部知识来提高生成文本的准确性和相关性。通过检索和调节相关的上下文文档&#xff0c;与传统语言模型相比&#xff0c;RAG 模型可以产生更真实、更深入和更具体的响应。 然而&…

诸葛亮的空城计 - 代理模式

定场诗 “无形之中蕴含至理&#xff0c;虚实相生方见大道。” 在三国演义中&#xff0c;诸葛亮的空城计可谓神来之笔。这看似冒险的策略&#xff0c;实则蕴含深意。今天&#xff0c;我们将透过空城计&#xff0c;一窥软件设计中代理模式的奥秘。 西城无人旦夕危&#xff0c;…

君方智能设计平台-事务管理技术方案

1.背景介绍 事务处理是指对数据进行一组操作&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败&#xff0c;以确保数据的一致性和完整性。软件的事务管理主要实现方案主要涉及以下几个方面&#xff1a; &#xff08;1&#xff09;数据一致性&#xff1a;在CAD软件中…

STM32实现看门狗(HAL库)

文章目录 一. 看门狗1. 独立看门狗&#xff08;IWDG&#xff09;1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗&#xff08;WWDG&#xff09;2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG&#xff0c;而导致芯片无法正常工…

Flask项目搭建及部署(完整版!全网最全)

flask搭建及部署 pip 19.2.3 python 3.7.5 Flask 1.1.1 Flask-SQLAlchemy 2.4.1 Pika 1.1.0 Redis 3.3.11 flask-wtf 0.14.2 1、创建flask项目&#xff1a; 创建完成后整个项目结构树&#xff1a; app.py: 项⽬管理⽂件&#xff0c;通过它管理项⽬。 static: 存放静态文…

map和set的原理、优劣势、应用场景和示例代码,统统告诉你。

map和set的原理都是基于哈希表实现的&#xff0c;通过哈希值来快速查找和插入元素&#xff0c;从而实现高效的数据存储和管理&#xff0c;那么他们之间有什么不同呢&#xff0c;该如何选择&#xff0c;本文带你了解。 一、map和set的原理 map和set都是数据结构&#xff0c;用…

【分布式系统三】监控平台Zabbix对接grafana(截图详细版)

目录 一.安装grafana并启动 二.浏览器访问 三.导入zabbix数据&#xff0c;对接grafana 四.如何导入模版 以前两篇博客为基础 【分布式系统】监控平台Zabbix介绍与部署&#xff08;命令截图版&#xff09;-CSDN博客 【分布式系统】监控平台Zabbix自定义模版配置-CSDN博客 …

java ReadWriteLock接口

在 Java 中&#xff0c;ReadWriteLock 接口的实现类ReentrantReadWriteLock 类提供了一种允许多个线程同时读取某一资源但只允许一个线程写的锁定机制。这种机制可以提高并发性能&#xff0c;特别是在读操作远多于写操作的场景下。 特性&#xff1a; 可重入&#xff1b;不存…

前端使用Threejs加载机械臂并控制机械臂跳舞

1. 前言 在我的第一篇博客中,大致讲解了如何使用threejs导入机械臂模型,以及如何让机械臂模型动起来的案例,可以看一下之前的博客前端使用Threejs控制机械臂模型运动 本篇博客主要讲解的是在原来的基础上添加GSAP动画库的应用,可以通过动画,来让机械臂进行指定轨迹位姿的运动…

基于SpringBoot的休闲娱乐代理售票系统

本系统主要包括管理员和用户两个角色组成&#xff1b;主要包括&#xff1a;首页、个人中心、用户管理、折扣票管理、分类管理、订单信息管理、退票信息管理、出票信息管理、系统管理等功能的管理系统。 &#x1f495;&#x1f495;作者&#xff1a;Weirdo &#x1f495;&#x…

Python酷库之旅-第三方库Pandas(009)

目录 一、用法精讲 19、pandas.read_xml函数 19-1、语法 19-2、参数 19-3、功能 19-4、返回值 19-5、说明 19-6、用法 19-6-1、数据准备 19-6-2、代码示例 19-6-3、结果输出 20、pandas.DataFrame.to_xml函数 20-1、语法 20-2、参数 20-3、功能 20-4、返回值 …

GTP/GTX 手动对齐,谈谈思路。

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【server】springboot 整合 redis

1、redis 使用模式 1.1 单机模式 1.1.1 编译安装方式 1.1.1.1 下载 Redis的安装非常简单&#xff0c;到Redis的官网&#xff08;Downloads - Redis&#xff09;&#xff0c;下载对应的版本&#xff0c;简单几个命令安装即可。 1.1.1.2 编译安装 tar xzf redis-stable.tar.…

GPU发展史(二):改变游戏规则的3Dfx Voodoo

小伙伴们&#xff0c;大家好呀&#xff0c;我是老猫。 在上一篇GPU发展史&#xff08;一&#xff09;文章中&#xff0c;我们介绍了1976-1995期间早期显卡的发展故事&#xff0c;今天我们将介绍在1995-1999年这段时间显卡的故事&#xff0c;而这段故事的主角就是——3Dfx 提起…

探索多模态预训练:MAnTiS、ActionCLIP、CPT与CoOp的Prompt技巧

上一篇博文整理了 预训练新范式&#xff08;Prompt-tuning&#xff0c;Prefix-tuning&#xff0c;P-tuning&#xff09; &#xff0c;主要是围绕NLP上的成果&#xff0c;具体的概念本文也不做过多赘述。本篇文章将主要整理几篇有代表性的Prompt方法在多模态领域中的应用。 Mult…

【ARMv8/v9 GIC 系列 1.7 -- GIC PPI | SPI | SGI | LPI 中断使能配置介绍】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC 各种中断使能配置PPIs(每个处理器私有中断)SPIs(共享外设中断)SGIs(软件生成的中断)LPIs(局部中断)GIC 各种中断使能配置 在ARM GICv3和GICv4架构中,不同类型的中断(如PPIs、SPIs、SGIs和LPIs)可以通过不同的方式进…

RabbitMQ(集群相关部署)

RabbitMQ 集群部署 环境准备&#xff1a;阿里云centos8 服务器&#xff0c;3台服务器&#xff0c;分别进行安装&#xff1b; 下载Erlang Erlang和RabbitMQ版本对照&#xff1a;https://www.rabbitmq.com/which-erlang.html 创建yum库配置文件 vim /etc/yum.repos.d/rabbi…

生物墨水:3D组织生物打印的基石

生物墨水是3D组织生物打印技术的核心组成部分。生物墨水通常由生物材料&#xff08;如水凝胶聚合物&#xff09;与所需的细胞和/或其他生物大分子&#xff08;例如生长因子&#xff09;混合而成。为了成功地进行组织生物打印&#xff0c;生物墨水必须满足以下要求&#xff1a; …