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

目录

一、使用的方法

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.生成效果:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++判断二叉树是否对称

可以使用递归的方式判断二叉树是否对称。判断二叉树是否为空&#xff0c;若为空则返回 true。然后编写一个辅助函数 isSymmetricHelper&#xff0c;该函数接受两个参数&#xff0c;分别是左子树和右子树。在 isSymmetricHelper 函数中&#xff0c;判断左子树的左子树和右子树的…

挑战杯 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

C++学习Day04之this指针

目录 一、程序及输出1.1 基础使用1.2 *this和链式编程1.2.1 返回引用进行链式编程1.2.2 返回值进行链式编程1.3 注意事项 二、分析与总结 一、程序及输出 在 C 中使用类的成员函数时&#xff0c;可以使用 this 指针来引用当前对象的地址。this 指针是一个隐式参数&#xff0c;它…

基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 损失函数和优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................…

代码随想录 Leetcode47. 全排列 II

题目&#xff1a; 代码(首刷自解 2024年2月6日&#xff09;&#xff1a; class Solution { private:vector<vector<int>> res;vector<int> path; public:void backtracing(vector<int>& nums, vector<bool>& used1, vector<bool>…

leetcode 算法 67.二进制求和(python版)

需求 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例 2&#xff1a; 输入&#xff1a;a “1010”, b “1011” 输出&#xff1a;“10101” 代码 class Solution…

使用 WPF + Chrome 内核实现高稳定性的在线客服系统复合应用程序

对于在线客服与营销系统&#xff0c;客服端指的是后台提供服务的客服或营销人员&#xff0c;他们使用客服程序在后台观察网站的被访情况&#xff0c;开展营销活动或提供客户服务。在本篇文章中&#xff0c;我将详细介绍如何通过 WPF Chrome 内核的方式实现复合客服端应用程序。…

聚观早报 | 小米14 Ultra官宣;苹果汽车项目调整

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 2月6日消息 小米14 Ultra官宣 苹果汽车项目调整 ROG游戏手机8系列推出福利 一加Ace 3原神刻晴定制机官宣 苹果i…

vite+vue3发布自己的npm组件+工具函数

记录一下个人最近一次发布npm组件的过程&#xff1a; 一、创建组件和工具函数 执行命令创建一个空项目&#xff1a; npm create vite 创建过程稍微有些慢&#xff0c;不知何故&#xff1f;其中选择vue , 个人暂时使用的JS 。在 src 目录下面创建一个文件 package 存放组件和公…

计算机网络-差错控制(纠错编码 海明码 纠错方法)

文章目录 纠错编码-海明码海明距离1.确定校验码位数r2.确定校验码和数据的位置3.求出校验码的值4.检错并纠错纠错方法1纠错方法2 小结 纠错编码-海明码 奇偶校验码&#xff1a;只能发现错误不能找到错误位置和纠正错误 海明距离 如果找到码距为1&#xff0c;那肯定为1了&…

K8S之标签的介绍和使用

标签 标签定义标签实操1、对Node节点打标签2、对Pod资源打标签查看资源标签删除资源标签 标签定义 标签就是一对 key/value &#xff0c;被关联到对象上。 标签的使用让我们能够表示出对象的特点&#xff0c;比如使用在Pod上&#xff0c;能一眼看出这个Pod是干什么的。也可以用…

校园墙表白墙系统uniapp微信小程序

配置文件 (自动编号、配置参数名称、配置参数值)&#xff1b; 前端开发:vue 语言&#xff1a;javapythonnodejsphp均支持 运行软件:idea/eclipse/vscode/pycharm/wamp均支持 框架支持:Ssm/django/flask/thinkphp/springboot/springcloud均支持 数据库 mysql 数据库工具&#x…

二维曲线旋转形成三维曲面

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题&#xff1a;创建一个带有盖的球体的可视化图形。程序通过将一个二维曲线沿着y轴旋转&#xff0c;形成三维曲面&#xff0c;从而实现这一目标。 关键…

Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器

测试uboot命令&#xff0c;搭建nfs服务器和tftp服务器&#xff0c;是测试uboot非常关键的一步。跳过这一节&#xff0c;后面可能要踩坑。 一、输入“help回车”&#xff0c;查询uboot所支持的命令 二、输入“? bootz回车”&#xff0c;查询“bootz”怎么用 注意&#xff1a;和…

ELFK日志采 - QuickStart

文章目录 架构选型ELKEFLK ElasticsearchES集群搭建常用命令 Filebeat功能介绍安装步骤Filebeat配置详解filebeat常用命令 Logstash功能介绍安装步骤Input插件Filter插件Grok Filter 插件Mutate Filter 插件常见的插件配置选项&#xff1a;Mutate Filter配置案例&#xff1a; O…

HarmonyOS开发工具DevEco Studio安装以及汉化

HUAWEI DevEco Studio 面向HarmonyOS应用及元服务开发者提供的集成开发环境(IDE)&#xff0c; 助力高效开发。 应用内共享HSP开发 支持在Stage模型和模块化编译方式下开发HSP&#xff0c;以及共享HSP给应用内其他模块使用;支持运行态共享HSP。Code Linter代码检查 支持ArkTS/T…

ArcGIS制图问题——标注和符号压盖

水文站网的站点&#xff08;包括水文站、水位站、雨量站、水质站、地下水站、墒情站等&#xff09;名称基本是以所在的村命名&#xff0c;如果在这个村有多个站点&#xff0c;造成了站点名称压盖的情况&#xff0c;如图&#xff1a; 该问题多个点要素图层标注重复&#xff0c;…

滑动窗口经典问题(算法村第十六关白银挑战)

最长字串专题 无重复字符的最长子串 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是…

Stable Diffusion 模型下载:RealCartoon3D - V14

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 RealCartoon3D 是一个动漫卡通混合现实风格的模型,具有真实卡通的 3D 效果,当前更新到 V14 版本。 RealCartoon3D 是我上传的第一个模型。我仍在学习这些东西,但…

有趣的CSS - 按钮文字上下滑动

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 这个按钮效果主要使用 :hover 伪选择器以及 transition 过渡属性来实现两个子元素上下过渡的效果。 此效果可以在主入口按钮、详情或者更多等按钮处使用&#xff0c;增加一些鼠…