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

news2024/11/14 18:27:50

目录

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.coloradmin.cn/o/1906815.html

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

相关文章

git 文件没有修改,但一直提示有0行改动,还原也不行

查看文件修改内容 原来是文件的模式(读写可执行权限)发生了变化,内容本是没有变化. 怎么解决 git config --add core.filemode false忽略文件模式

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或…

基于全国产复旦微JFM7K325T+ARM人工智能数据处理平台

复旦微可以配合的ARM平台有&#xff1a;RK3588/TI AM62X/ NXP IMX.8P/飞腾FT2000等。 产品概述 基于PCIE总线架构的高性能数据预处理FMC载板&#xff0c;板卡采用复旦微的JFM7K325T FPGA作为实时处理器&#xff0c;实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具…

LangChain(四)工具调用的底层原理!给大模型按上双手吧!(新手向)

背景 经过前面三篇的内容&#xff0c;我想大家对于大模型的构建、Langchain的优势、Chain的构建有了相当程度的理解&#xff08;虽然只是最简单的示例&#xff0c;但是足够有代表性&#xff09;。 后续Chain的使用将会更加丰富多彩&#xff0c;您会了解Langchain开发的大模型…

《向量数据库指南》——Milvus Cloud生成器增强:优化RAG Pipeline的深入探索

在信息检索与生成(Retrieval-Augmented Generation, RAG)的框架下,大型语言模型(Large Language Models, LLMs)如GPT系列、T5等,通过结合外部知识库的能力,极大地扩展了它们的应用场景与准确性。然而,在实际应用中,RAG系统仍面临诸多挑战,如检索到的信息中包含噪声、…

Linux 命令历史、补全和正则表达式

1.命令历史就和windows的ctrlz一个概念&#xff0c;就是返回上一次的命令。 按下小键盘上下切换 ctrlc可以终止本次输入&#xff0c;进行下一次输入。 2.tab键可以自动补全&#xff08;有点鸡肋&#xff09; 3.正则表达式 类似于word的快速搜索&#xff0c;Linux也是用*和…

SpringSecurity中文文档(Servlet Authorize HttpServletRequests)

Authorize HttpServletRequests SpringSecurity 允许您在请求级别对授权进行建模。例如&#xff0c;对于 Spring Security&#xff0c;可以说/admin 下的所有页面都需要一个权限&#xff0c;而其他所有页面只需要身份验证。 默认情况下&#xff0c;SpringSecurity 要求对每个…

Java套红:指定位置合并文档-NiceXWPFDocument

需求&#xff1a;做个公文系统&#xff0c;需要将正文文档在某个节点点击套红按钮&#xff0c;实现文档套红 试了很多方法&#xff0c;大多数网上能查到但是实际代码不能找到关键方法&#xff0c;可能是跟包的版本有关系&#xff0c;下面记录能用的这个。 一&#xff1a;添加依…

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

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

“一稿多投”是学术不端,还是作者的合法权利?

【SciencePub学术】“一稿多投”一直被认为是不端的行为&#xff0c;但这个“规矩”是在纸质时代信息沟通不畅的情况下制定的&#xff0c;近年来有关取消这一观念的声音已振聋发聩&#xff01; 詹启智的《一稿多投是著作权人依法享有的合法权利一一兼论一稿多发后果的规制》一文…

SpringBoot项目——送水管理系统

1、导入坐标 坐标作用pagehelper-spring-boot-startermybatis分页插件spring-boot-starter-thymeleafJSP模板引擎mybatis-spring-boot-startermybatisspring-boot-starter-webwebspring-boot-starter-testtestlombok不需要再写getter、setter或equals方法&#xff0c;只要有一…

建立有效的DNS性能检测机制

今天来分享如何建立有效的DNS性能监测机制&#xff0c;实时或定期监测关键指标。 一、建立DNS性能监测机制 &#xff08;一&#xff09;选择合适的监测工具 市场上有多种DNS性能监测工具可供选择&#xff0c;如IP数据云DNS检测功能。其具备强大的功能&#xff0c;能够针对多种…

简过网:快来看看你的专业能考哪个类型的事业单位?

你的专业能考哪个类型的事业单位&#xff0c;你知道吗&#xff1f;想考事业单位的姐妹&#xff0c;一定要在备考之前&#xff0c;查清楚你的专业适不适合考事业单位、考哪类事业编以及能报考哪些岗位&#xff1f;这个才能上岸的几率更高一些&#xff01; 事业单位有5类岗位&am…

Java动态执行jar包中类的方法

动态加载执行jar包&#xff0c;在实际开发中经常会需要用到&#xff0c;尤其涉及平台和业务的关系的时候&#xff0c;业务逻辑部分可以独立出去交给业务方管理&#xff0c;业务方只需要提供jar包&#xff0c;就能在平台上运行。 结论 通过反射可以实现动态调用jar包中的类的方…

免费可商用的Navicat Premium Lite要不要用?小心收到律丝函!

作者公众号&#xff1a;霸王龙的日常 专注数据库&#xff0c;分享实用的项目实战经验。 上周五写了一篇关于Navicat Premium Lite的文章&#xff0c;有网友去官网下载&#xff0c;反馈当前官网Navicat Premium Lite简介和我之前文章中的介绍的有出入。 我赶紧打开网站看了下Na…

修改CentOS7.9跟Unbantu24的ip地址

修改CentOS的IP地址 ip addr 查看IP地址 cd /etc/sysconfig/network-scripts ls vi ifcfg-ens33修改ip地址跟干网关地址 TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" DEFROUTE"yes" IPV4_FA…

排序 -- 手撕归并排序(递归和非递归写法)

一、基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有…

掌上教务系统-计算机毕业设计源码84604

摘要 在数字化教育日益成为主流的今天&#xff0c;教务管理系统的智能化和便捷性显得尤为重要。为满足学校、教师、学生及家长对教务管理的高效需求&#xff0c;我们基于Spring Boot框架设计并实现了一款掌上教务系统。该系统不仅具备课程分类管理功能&#xff0c;使各类课程信…

软件架构之开发方法

软件架构之开发方法 第6章&#xff1a;开发方法6.1 软件生命周期6.2 软件开发模型6.2.1 瀑布模型6.2.2 演化模型6.2.3 螺旋模型6.2.4 增量模型6.2.5 构件组装模型 6.3 统一过程6.4 敏捷方法6.4.1 极限编程6.4.2 特征驱动开发6.4.3 Scrum6.4.4 水晶方法6.4.5 其他敏捷方法 6.5 软…

《梦醒蝶飞:释放Excel函数与公式的力量》9.5 IRR函数

9.5 IRR函数 IRR函数是Excel中用于计算内部收益率&#xff08;Internal Rate of Return, IRR&#xff09;的函数。内部收益率是评估投资项目盈利性的重要指标&#xff0c;它表示使投资项目的净现值&#xff08;NPV&#xff09;为零的折现率。 9.5.1 函数简介 IRR函数通过一系…