C#用Array类的FindAll方法和List<T>类的Add方法按关键词在数组中检索元素并输出

news2024/11/17 10:36:01

目录

一、使用的方法

1. Array.FindAll(T[], Predicate) 方法

(1)定义

(2)示例

2.List类的常用方法

(1)List.Add(T) 方法

(2)List.RemoveAt(Int32) 方法

(3)List.Insert(Int32, T) 方法

(4)List.RemoveAll(Predicate) 方法

(5)List.RemoveRange(Int32, Int32) 方法

(6)示例

二、实例

1.源码

2.生成效果:


一、使用的方法

1. Array.FindAll<T>(T[], Predicate<T>) 方法

        通过使用Array类的FindAll方法来实现根据指定条件在数组中检索元素的功能。

(1)定义

public static T[] FindAll<T> (T[] array, Predicate<T> match);

类型参数
T
数组元素的类型。

参数
array    T[]
要搜索的从零开始的一维 Array。

match    Predicate<T>
Predicate<T>,定义要搜索元素的条件。

返回
T[]
如果找到一个 Array,其中所有元素均与指定谓词定义的条件匹配,则为该数组;否则为一个空 Array。

例外
ArgumentNullException
array 为 null。
- 或 -
match 为 null。

(2)示例

// 创建一个包含 50 个随机数的数组,其值范围为 0 到 1000。
// 然后, FindAll 使用 lambda 表达式为搜索条件,
// 该表达式返回 300 到 600 范围内的值。
namespace _094_1
{
    public class Example
    {
        public static void Main()
        {
            int[] values = GetArray(50, 0, 1000);
            int lowBound = 300;
            int upperBound = 600;
            int[] matchedItems = Array.FindAll(values, x =>
                                             x >= lowBound && x <= upperBound);
            int i = 0;
            foreach (int item in matchedItems)
            {
                Console.Write("{0}  ", item);
                i++;
                if (i % 12 == 0)
                {
                    Console.WriteLine();
                }
            }
            //for (int ctr = 0; ctr < matchedItems.Length; ctr++)
            //{
            //    Console.Write("{0}  ", matchedItems[ctr]);
            //    if ((ctr + 1) % 12 == 0)
            //        Console.WriteLine();
            //}
        }
        /// <summary>
        /// 随机生成整型数组
        /// </summary>
        /// <param name="n">数组元素个数</param>
        /// <param name="lower">范围的下</param>
        /// <param name="upper">范围的上</param>
        /// <returns></returns>
        private static int[] GetArray(int n, int lower, int upper)
        {
            Random rnd = new();
            List<int> list = [];
            for (int ctr = 1; ctr <= n; ctr++)
                list.Add(rnd.Next(lower, upper + 1));

            return [.. list];//等效于return list.ToArray();
        }
    }
}
// 运行结果:
/*
476  417  509  391  461  327  383  500  359  489  495  582
543  313  596  568
 */

2.List<T>类的常用方法

(1)List<T>.Add(T) 方法

         将对象添加到 List<T> 的结尾处。就好像StringBuilder.Append()一样。

public void Add (T item);
参数
item    T
要添加到 List<T> 末尾的对象。 对于引用类型,该值可以为 null。

实现
Add(T)

(2)List<T>.RemoveAt(Int32) 方法

         移除 List<T> 的指定索引处的元素。

public void RemoveAt (int index);

参数
index    Int32
要移除的元素的从零开始的索引。

例外
ArgumentOutOfRangeException
index 小于 0。
或 - index 等于或大于 Count。

(3) List<T>.Insert(Int32, T) 方法

        将元素插入 List<T> 的指定索引处。

public void Insert (int index, T item);

参数
index    Int32
应插入 item 的从零开始的索引。

item    T
要插入的对象。 对于引用类型,该值可以为 null。

实现
Insert(Int32, T)

例外
ArgumentOutOfRangeException
index 小于 0。
- 或 -
index 大于 Count。

(4)List<T>.RemoveAll(Predicate<T>) 方法

         移除与指定的谓词所定义的条件相匹配的所有元素。

public int RemoveAll (Predicate<T> match);

参数
match    Predicate<T>
Predicate<T> 委托,用于定义要移除的元素应满足的条件。

返回
Int32
从 List<T> 中移除的元素数。

例外
ArgumentNullException
match 为 null。

(5)List<T>.RemoveRange(Int32, Int32) 方法

         从 List<T> 中移除一系列元素。

public void RemoveRange (int index, int count);

参数
index    Int32
要移除的元素范围的从零开始的起始索引。

count    Int32
要移除的元素数。

例外
ArgumentOutOfRangeException
index 小于 0。
或 - count 小于 0。
ArgumentException
index 和 count 不表示 List<T> 中元素的有效范围。

(6)示例

namespace _094_2
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
            //添加对象:
            List<int> numbers = [1, 2, 3];
            //删除对象:
            numbers.RemoveAt(1); // 删除索引为1的对象(2)
            //插入对象:
            numbers.Insert(1, 4); // 在索引为1的位置插入对象(4)
            numbers.Add(6);
            numbers.Add(3);
            numbers.Add(6);
            numbers.Add(3);
            numbers.Add(4);
            numbers.Add(5);
            numbers.Add(6);
            //使用RemoveAll方法来删除List<T>中的所有对象:
            numbers.RemoveAll(x => x == 3); // 删除所有值为2的对象

            //使用RemoveRange方法来删除List<T>中指定范围的对象:
            numbers.RemoveRange(1, 3); // 删除索引从1开始的3个对象

            //使用List<T>类的GetEnumerator方法遍历列表中的剩余对象。
            // 先移除一个对象、再插入一个、在添加3个
            numbers.RemoveAt(2);
            numbers.Insert(2, 6);
            numbers.Add(6);
            numbers.Add(78);
            numbers.Add(66);
            // 遍历剩余对象
            for (int i = 0; i < numbers.Count; i++)
            {
                Console.Write("{0}  ",numbers[i]);
            }
            Console.WriteLine();
        }
    }
}
//运行结果:
/*
1  4  6  6  6  78  66

 */

二、实例

        按关键词检索并输出

1.源码

//按关键词检索输出
namespace _094
{
    public partial class Form1 : Form
    {
        private GroupBox? groupBox1;
        private TextBox? textBox2;
        private Label? label1;
        private Label? label2;
        private TextBox? textBox1;
        private string[]? str_array;//定义字符串数组字段

        public Form1()
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterScreen;
            Load += Form1_Load;
        }
        private void Form1_Load(object? sender, EventArgs e)
        {
            // 
            // textBox1显示
            // 
            textBox2 = new TextBox
            {
                Location = new Point(12, 140),
                Multiline = true,
                Name = "textBox1",
                Size = new Size(290, 69),
                TabIndex = 0
            };
            // 
            // label1
            // 
            label1 = new Label
            {
                AutoSize = true,
                Location = new Point(39, 95),
                Name = "label1",
                Size = new Size(80, 17),
                TabIndex = 1,
                Text = "输入关键词:"
            };
            // 
            // label2
            // 
            label2 = new Label
            {
                AutoSize = true,
                Location = new Point(135, 19),
                Name = "label2",
                Size = new Size(0, 17),
                TabIndex = 2
            };
            // 
            // textBox2输入
            // 
            textBox1 = new TextBox
            {
                Location = new Point(135, 89),
                Name = "textBox2",
                Size = new Size(125, 33),
                TabIndex = 3
            };
            textBox1.TextChanged += TextBox1_TextChanged;
            // 
            // groupBox1
            // 
            groupBox1 = new GroupBox
            {
                Location = new Point(12, 12),
                Name = "groupBox1",
                Size = new Size(290, 122),
                TabIndex = 0,
                TabStop = false,
                Text = "关键词检索"
            };
            groupBox1.Controls.Add(label1);
            groupBox1.Controls.Add(label2);
            groupBox1.Controls.Add(textBox1);
            groupBox1.SuspendLayout();

            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(314, 221);
            Controls.Add(textBox2);
            Controls.Add(groupBox1);
            Name = "Form1";
            Text = "按关键词在数组中检索";
            groupBox1.ResumeLayout(false);
            groupBox1.PerformLayout();

            str_array = ["明日科技","C#编程词典","C#范例大全","C#范例宝典"];
            for (int i = 0; i < str_array.Length; i++)//循环输出字符串
            {
                label2.Text += str_array[i] + "\n";
            }
        }
        /// <summary>
        /// 输出检索结果
        /// 使用FindAll方法查找相应字符串
        /// </summary>
        private void TextBox1_TextChanged(object? sender, EventArgs e)
        {
            if (textBox1!.Text != string.Empty)
            {
                string[] str_temp = Array.FindAll
                    (str_array!, (s) => s.Contains(textBox1.Text));
                if (str_temp.Length > 0)
                {
                    textBox2!.Clear();
                    foreach (string s in str_temp)//向控件中添加字符串
                    {
                        textBox2.Text += s + Environment.NewLine;
                    }
                }
                else
                {
                    textBox2!.Clear();
                    textBox2.Text = "没有找到记录";
                }
            }
            else
            {
                textBox2!.Clear();
            }
        }

    }
}

2.生成效果:

 

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

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

相关文章

基于若依的ruoyi-nbcio流程管理系统自定义业务实现一种简单的动态任务标题(续)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

Msql-数据库死锁

实验案例 CREATE TABLE t1_deadlock ( id int(11) NOT NULL, name varchar(100) DEFAULT NULL, age int(11) NOT NULL, address varchar(255) DEFAULT NULL, PRIMARY KEY (id), KEY idx_age (age) USING BTREE, KEY idx_name (name) USING BTREE ) ENGINEInnoDB DEFAULT CHARS…

Kafka SASL_SSL双重认证

文章目录 1. 背景2. 环境3. 操作步骤3.1 生成SSL证书3.2 配置zookeeper认证3.3 配置kafka安全认证3.4 使用kafka客户端进行验证3.5 使用Java端代码进行认证 1. 背景 kafka提供了多种安全认证机制&#xff0c;主要分为SASL和SSL两大类。 SASL&#xff1a; 是一种身份验证机制&…

SRS视频服务器使用记录

SRS是一个开源的&#xff08;MIT协议&#xff09;简单高效的实时视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用&#xff0c;提供流的接收和分发的能力&#xff0c;是一个…

鸿蒙开发系列教程(十二)--布局应用:Flex布局

相关属性参数与css3的flex布局参数相似 排列方向&#xff1a;direction: FlexDirection.Row, 换行&#xff1a;wrap: FlexWrap.NoWrap, 水平垂直对齐方式&#xff1a; justifyContent: FlexAlign. SpaceBetween, alignItems: ItemAlign.Center Entry Component struct Flex…

【开源】SpringBoot框架开发高校学生管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学生选课模块2.4 成绩管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学院课程表3.2.3 学生选课表3.2.4 学生成绩表 四、系统展示五、核心代码5.1 查询课程5.2 新…

目标检测:3采用YOLOv8 API训练自己的模型

​ 目录 ​1.YOLOv8 的新特性 2.如何使用 YOLOv8? 3使用YOLOv8训练模型 4.验证训练集 5.测试训练集 6.测验其他图片 7 其他问题 参考: 1.YOLOv8 的新特性 Ultralytics 为 YOLO 模型发布了一个全新的存储库。它被构建为 用于训练对象检测、实例分割和图像分类模型的统…

【UE】游戏运行流程的简单理解

流程图 官方的游戏流程图&#xff1a; 一般顺序为初始化引擎、创建并初始化 GameInstance、加载关卡&#xff0c;最后开始游戏。 总的来说就是&#xff1a; 开始游戏-》游戏实例-》关卡-》游戏模式-》玩家控制器-》Pawn、玩家状态、HUD、UMG&#xff08;可有可无&#xff09; …

【力扣】Z字形变换,模拟+直接构造

Z字形变换原题地址 方法一&#xff1a;利用二维矩阵模拟 对于特殊情况&#xff0c;z字形变换后只有一行或只有一列&#xff0c;则变换后的字符串和原字符串相同。 对于一般情况&#xff0c;我们可以考虑按照题目要求&#xff0c;把字符串按照Z字形存储到二维数组中&#xff…

亿级流量高并发春晚互动前端技术揭秘

前言 2022年1月&#xff0c;京东成为央视总台2022年春节联欢晚会独家互动合作伙伴&#xff0c;双方在红包互动、电商等方面展开全方位深度合作。在除夕当天产生691亿次互动&#xff0c;送出15亿元红包好物。 如何在这种大规模、高并发的场景下&#xff0c;确保系统的稳定性和…

计算机毕业设计 | SSM 医药信息管理系统(附源码)

1&#xff0c; 概述 1.1 课题背景 本系统由说书客面向广大民营药店、县区级医院、个体诊所等群体的药品和客户等信息的管理需求&#xff0c;采用SpringSpringMVCMybatisEasyui架构实现&#xff0c;为单体药店、批发企业、零售连锁企业&#xff0c;提供有针对性的信息数据管理…

【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总

【NLP概念合集&#xff1a;一】预训练 Pre-Training&#xff0c;微调 Fine-Tuning 及其方法的概念区别 前言请看此正文预训练 Pre-Training无监督学习 unsupervised learning概念&#xff1a;标签PCA 主成分分析&#xff08;Principal Component Analysis&#xff09;降维算法L…

想要精准跟进客户,试试CRM系统!

客户跟进是任何成功企业的命脉&#xff0c;它是从初始联系到转化、从培育到购买之间的桥梁。然而&#xff0c;客户们每天都被各种信息轰炸&#xff0c;很难将注意力集中在任何一个事情上。因此&#xff0c;企业想要在客户中脱颖而出&#xff0c;就必须能够吸引并维持他们的注意…

代驾应用系统(ssm)

登录首页 管理员界面 代驾司机界面 普通用户界面 前台页面 1、系统说明 &#xff08;1&#xff09; 框架&#xff1a;spring、springmvc、mybatis、mysql、jsp &#xff08;2&#xff09; 系统分为前台系统、后端管理系统 2、欢迎留言联系交流学习讨论&#xff1a;qq 97820625…

【JS逆向学习】今日头条

逆向目标 目标网页&#xff1a;https://www.toutiao.com/?wid1707099375036目标接口&#xff1a;https://www.toutiao.com/api/pc/list/feed目标参数&#xff1a;_signature 逆向过程 老规矩先观察网络请求&#xff0c;过滤XHR请求观察加密参数&#xff0c;发现Payload的_s…

代码手术刀-自定义你的代码重构工具

前言 笔者近日在做代码仓库的存量代码缩减工作&#xff0c;首先考虑的是基于静态扫描的缩减&#xff0c;尝试使用了很多工具来对代码进行优化&#xff0c;例如PMD、IDEA自带的inspect功能、findBugs等。但是无一例外&#xff0c;要么过于“保守”&#xff0c;只给出扫描结果&a…

计算机网络自顶向下Wireshark labs-HTTP

我直接翻译并在题目下面直接下我的答案了。 1.基本HTTP GET/response交互 我们开始探索HTTP&#xff0c;方法是下载一个非常简单的HTML文件 非常短&#xff0c;并且不包含嵌入的对象。执行以下操作&#xff1a; 启动您的浏览器。启动Wireshark数据包嗅探器&#xff0c;如Wir…

HGAME 2024 WEEK1 Web方向题解 全

---------【WEEK-1】--------- Bypass it 题目描述&#xff1a;This page requires javascript to be enabled &#x1f603; 开题 不给注册&#xff0c;进注册就弹窗。根据题目描述&#xff0c;禁用JS 注册成功登录给flag 2048*16 前端小游戏出这么难。JS源码各种混淆手段…

Java-并发高频面试题-2

接着之前的Java-并发高频面试题 7. synchronized的实现原理是怎么样的&#xff1f; 首先我们要知道synchronized它是解决线程安全问题的一种方式&#xff0c;而具体是怎么解决的呢&#xff1f;主要是通过加锁的方式来解决 在底层实现上来看 是通过 monitorenter、monitorexit…

LabVIEW多功能接口卡驱动

LabVIEW多功能接口卡驱动 随着自动化测试系统的复杂性增加&#xff0c;对数据采集与处理的需求不断提高。研究基于LabVIEW开发平台&#xff0c;实现对一种通用多功能接口卡的驱动&#xff0c;以支持多通道数据采集及处理功能&#xff0c;展现LabVIEW在自动化和测量领域的强大能…