【C# 】 一个List<T> 如何快速的知道里面的最大、最小、平均值呢?

在C#中,要从一个List<T>中找到最大值、最小值和平均值,首先需要确保列表中的元素类型支持这些操作(例如int、ushort或double)。

这里使用LINQ(Language Integrated Query)来简化这些计算。

如果使用的是C# 8.0及以上版本,还可以利用范围变量(range variables)来进一步简化代码。

使用LINQ 

List<ushort>示例代码

using System;
using System.Collections.Generic;
using System.Linq;class Program
{static void Main(){List<ushort> numbers = new List<ushort> { 5, 10, 15, 20, 25 };ushort max = numbers.Max();ushort min = numbers.Min();double average = numbers.Select(x => (double)x).Average();  // 先将 ushort 转换为 double 再计算平均值Console.WriteLine("最大值: " + max);Console.WriteLine("最小值: " + min);Console.WriteLine("平均值: " + average);}
}

List<int>示例代码

using System;
using System.Linq;
using System.Collections.Generic;class Program
{static void Main(){List<int> numbers = new List<int> { 1, 3, 5, 7, 9 };// 使用 LINQ 查询语法int max = numbers.Max();int min = numbers.Min();double average = numbers.Average();Console.WriteLine($"Max: {max}");Console.WriteLine($"Min: {min}");Console.WriteLine($"Average: {average}");}
}

List<double> 示例代码

using System;
using System.Linq;
using System.Collections.Generic;class Program
{static void Main(){// 如果是 double 类型的列表List<double> numbersDouble = new List<double> { 1.1, 3.3, 5.5, 7.7, 9.9 };double maxDouble = numbersDouble.Max();double minDouble = numbersDouble.Min();double averageDouble = numbersDouble.Average();Console.WriteLine($"Max (double): {maxDouble}");Console.WriteLine($"Min (double): {minDouble}");Console.WriteLine($"Average (double): {averageDouble}");}
}

注意事项

代码中,Max(), Min()Average() 方法都是LINQ扩展方法,它们可以直接作用于任何实现了IEnumerable<T>接口的集合上。这些方法会返回相应的最大值、最小值和平均值。

  • 对于非数值类型的T,这些操作可能无法直接应用。
  • 如果列表为空,则Max() 和 Min() 会抛出异常,而Average()则返回0(对于整数类型)或0.0(对于浮点数类型)。
  • 在实际应用中,最好添加一些错误处理逻辑以避免程序因空列表而崩溃。

使用范围变量(range variables) 

 在C# 8.0及更高版本中,可以使用范围变量(range variables)来简化对序列的访问。不过,在本例中,范围变量主要用于索引或切片操作,并不直接简化获取最大值、最小值和平均值的操作。但我们可以结合范围变量来展示如何简洁地处理数据。

如果想要使用范围变量来遍历列表并计算最大值、最小值和平均值,可以按照以下方式进行:

using System;
using System.Linq;
using System.Collections.Generic;class Program
{static void Main(){List<int> numbers = new List<int> { 1, 3, 5, 7, 9 };// 计算最大值、最小值和平均值int max = numbers.Max();int min = numbers.Min();double average = numbers.Average();// 使用 range variables 打印每个元素foreach (var n in numbers){Console.WriteLine(n);}// 或者使用 range variables 和 _ (下划线)作为占位符for (int i = 0; i < numbers.Count; i++){Console.WriteLine($"Element at index {i}: {numbers[i]}");}Console.WriteLine($"Max: {max}");Console.WriteLine($"Min: {min}");Console.WriteLine($"Average: {average}");}
}

在这个例子中,我们使用了简单的foreach循环和for循环来遍历列表。虽然这里没有直接用到范围变量来简化最大值、最小值和平均值的计算,但你可以使用范围变量来简化其他方面的代码,比如访问列表的子集或进行切片操作。

如果想要使用范围变量来处理列表的一部分,可以考虑下面的例子:

using System;
using System.Linq;
using System.Collections.Generic;class Program
{static void Main(){List<int> numbers = new List<int> { 1, 3, 5, 7, 9 };// 获取前三个元素var firstThree = numbers[0..3];Console.WriteLine("First three elements:");foreach (var n in firstThree){Console.WriteLine(n);}// 获取除了前两个的所有元素var exceptFirstTwo = numbers[2..];Console.WriteLine("Elements except the first two:");foreach (var n in exceptFirstTwo){Console.WriteLine(n);}// 获取除了最后两个的所有元素var exceptLastTwo = numbers[..^2];Console.WriteLine("Elements except the last two:");foreach (var n in exceptLastTwo){Console.WriteLine(n);}// 计算最大值、最小值和平均值int max = numbers.Max();int min = numbers.Min();double average = numbers.Average();Console.WriteLine($"Max: {max}");Console.WriteLine($"Min: {min}");Console.WriteLine($"Average: {average}");}
}

在这个例子中,我们使用了范围变量来获取列表的不同部分,并打印出来。这可以让你更容易地处理列表的子集。但是,对于最大值、最小值和平均值的计算,还是使用LINQ的方法更加简洁。

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

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

相关文章

源码拆解SpringBoot的自动配置机制

SpringBoot相比于Spring系列的前作&#xff0c;很大的一个亮点就是将配置进行了简化&#xff0c;引入了自动化配置&#xff0c;仅靠几个注解和yml文件就取代了之前XML的繁琐配置机制&#xff0c;这也是SpringBoot的独有特点&#xff0c;下面我们从源码角度&#xff0c;一点点拆…

Golang | Leetcode Golang题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; var (singles []string{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}teens []string{&…

IEC61850 协议解读

1. IEC61850 协议介绍 IEC 61850 是定义 变电站 自动化系统 中 设备 及设备之间相互交互的 国际标准。 给出英文定义&#xff1a;IEC 61850 is the international standard for defining devices within substation automation systems and how they interact with one anoth…

Java基础-Java多线程机制

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…

git命令使用详细介绍

1 环境配置 设置的信息会保存在~/.gitconfig文件中 查看配置信息 git config --list git config user.name设置用户信息 git config --global user.name "有勇气的牛排" git config --global user.email “1809296387qq.com”2 获取Git仓库 2.1 本地初始化一个仓…

GO-学习-02-常量

常量是不变的 const package main import "fmt"func main() {//常量定义时必须赋值const pi 3.1415926const e 2.718//一次声明多个常量const(a 1b 2c "ihan")const(n1 100n2n3)//n2,n3也是100 同时声明多个常量时&#xff0c;如果省略了值则表示和…

一个vue mixin 小案例,实现等比例缩放

mixin.js /** Author: jinjianwei* Date: 2024-07-24 16:17:16* Description: 等比例缩放&#xff0c;屏幕适配 mixin 函数*/// * 默认缩放值 const scale {width: 1,height: 1, } // * 设计稿尺寸&#xff08;px&#xff09; const baseWidth 1920 const baseHeight 1080 …

Android Studio入门级教程(二)——项目开发基础(Java新手向))持续更新ing

目录 前言&#xff1a; 一.使用Log工具打印日志 常见语法&#xff1a; 如何使用&#xff1f; 二.工程目录结构 三.编译配置文件build.gradle 四.运行配置文件AndroidManifest.xml 五.界面显示与逻辑处理 六.创建新的app页面 1.包含的步骤 在layout目录下创建XML文件…

uniapp集成安卓原生录屏插件以及使用

概述 我们知道UniApp的出现简化了开发者的工作流程&#xff0c;并减少了代码的重复编写。开发者可以使用一套代码编译到iOS、Android、以及各种小程序的应用&#xff0c;节省了人力和时间成本&#xff0c;但是涉及到与系统交互的时候&#xff0c;比如录屏、录音、录像、文件操…

Ubuntu使用root远程登录报错Permission denied, please try again.

Ubuntu使用root远程登录报错Permission denied, please try again. 在Ubuntu上直接使用root账户进行SSH远程登录通常会遇到权限被拒绝的问题。这是因为默认情况下&#xff0c;Ubuntu禁用了root账户的SSH远程登录&#xff0c;这是出于安全考虑。 如果你需要允许root账户进行SS…

Java 每日一题: for 与 foreach 的区别 ?

for 循环&#xff1a;是最基本的循环结构&#xff0c;可以通过初始化语句、循环条件和迭代语句来控制循环的执行。 foreach 循环&#xff08;也称为增强型 for 循环&#xff09;&#xff1a;用于遍历集合或数组中的元素&#xff0c;简化了遍历过程&#xff0c;没有显式地控制索…

vercel 如何部署 express 项目

注意&#xff1a;如果你是用 express-generator 生成的 express 项目&#xff0c;请检查是否有依赖 jade &#xff0c;如果有的话删除目录下的 views 文件夹&#xff0c;并把所有渲染页面的方法改成 res.send() !!!!!! 然后在项目根目录创建文件 vercel.json {&qu…

获取后端返回的图形验证码

如果后端返回的直接就是一个图形&#xff0c;有以下几种方式展示 一、直接在img标签里面的src里面调用接口 <img :src"dialogSrc" class"photo" alt"验证码图片" click"changeDialog">let orgUrl "/api/captcha" …

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换&#xff0c;效率过低&#xff0c;所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本&#xff08;Build 19041 及更高版本&#xff09;或 Win…

基础复习(集合)

集合 Collection单列集合 1.特点 2.常用方法&#xff08;Collection都可用&#xff09; 遍历方式 迭代器遍历 Iterator<String> it c.iterator();//此处c是之前定义好的集合//第二步&#xff1a;用于判断当前位置是否有元素可以获取 //解释&#xff1a;hasNext()方…

多种类动物智能识别系统:基于深度学习的UI界面与YOLO模型实现

基于深度学习的多种类动物识别系统 引言 随着深度学习技术的发展&#xff0c;计算机视觉领域取得了显著进展。动物识别作为计算机视觉的一个重要应用领域&#xff0c;可以广泛应用于野生动物监测、动物行为研究和动物园管理等场景。本文将详细介绍如何从零开始构建一个基于深…

OWS开放式耳机真的火了:漫步者、悠律、小米开放式耳机各具特点

开放式真无线耳机作为的蓝牙耳机二级分类&#xff0c;在近几年的发展趋势可以说超乎了所有人的想象。 2024 年第一季度中国线上蓝牙耳机销量达到 1757 万副,同比增长 15%,其中开放式耳机市场份额达到 14.4%,较去年同期增长 7.7%,销量同比大幅增长 148%&#xff0c;是整体耳机市…

CMakeList学习笔记

设置项目&#xff1a;project project(planning VERSION 1.0.0 LANGUAGES CXX) # 项目的名字 版本 1.1.0 编程语言 CXX 设置包含目录&#xff1a;include_directories、targer_include_directories 设置编译类型&#xff1a;add_executable、add_library add_executable(demo d…

Mysql中(基于GTID方式)实现主从复制,单主复制详细教程

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

精密电路设计中的高精电阻:分流电阻

精密电路设计要求电路元件具有极高的精度和稳定性。在这些设计中&#xff0c;分流电阻扮演着至关重要的角色。本文将探讨分流电阻的基本原理、选择标准、应用场景以及在现代精密电路设计中的重要性。 在电子测量和控制领域&#xff0c;电流的精确测量是实现电路精确控制的关键。…