C# 在列表中按特性查找
来源:互联网 发布:寿命试验 二型删失数据 编辑:程序博客网 时间:2024/06/06 21:54
声明:阅读本文需要 C# 泛型和委托的基本知识。
大家好!
列表在编程过程中应用极为广泛,而按照索引来查找显然不能满足所有需求, C#.NET 提供了很好的内建方法来方便程序员编写按照特性来搜索列表中的成员的代码。
下面我将介绍该方法。
在 List 类中,有几个方 :FindIndex 、 FindAll、Find、FindIndexLast、FindLast 。
FindIndex 方法的参数是一个委托,该委托是 Predicate<T> 类型的,接受一个 T 类型的参数,返回一个布尔值。其他方法的参数也是如此。
Predicate<T> 的定义如下:
public delegate bool Predicate<T>(T object)
方法签名如下:
public int FindIndex(Predicate<T> func)
这几个方法会将列表中的每一项作为参数,传递给该委托。 FindIndex 会返回第一个在委托中返回布尔值的对象的索引,并停止查找;FindAll 则会一直查找到结束为止,并返回一个 T 类型的列表;Find 则会返回第一个符合条件的T 类型的对象,并结束查找;FindIndexLast 和 FindLast 是从后向前查找,功能分别和 FindIndex 及 Find 对应。
下面用一个示例来说明(由于这几个函数用法都一样,只是返回类型不同,就只拿 FindIndex 和 FindAll 来说明):
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace FindFeature{ //定义球队类 class FootballTeam { private String name; //球队名 private int winnerCount; //冠军次数 private int level; //等级 public String Name { get; set; } public int WinnerCount { get; set; } public int Level { get; set; } //3个参数的构造函数 public FootballTeam(String name, int winnerCount, int level) { this.Name = name; this.WinnerCount = winnerCount; this.Level = level; } //1个参数的构造函数 public FootballTeam(String name) { this.Name = name; } //按照球队名查找 public bool FindName(FootballTeam footballTeam) { if (this.Name == footballTeam.Name) { return true; } else { return false; } } //按照夺冠次数查找 public static bool FindWinnerCount(FootballTeam footballTeam) { if (footballTeam.WinnerCount > 0) { return true; } else { return false; } } } class Program { static void Main(string[] args) { //构建列表并向其中添加4个成员 List<FootballTeam> teams = new List<FootballTeam>(); teams.Add(new FootballTeam("A", 3, 1)); teams.Add(new FootballTeam("B", 4, 1)); teams.Add(new FootballTeam("C", 2, 2)); teams.Add(new FootballTeam("D", 4, 2)); teams.Add(new FootballTeam("E", 0, 1)); //查找球队名为 "B" 的对象 int ind = teams.FindIndex(new FootballTeam("B").FindName); //也可以使用lambda表达式(lambda 表达式本文不赘述),代码如下: //int ind = teams.FindIndex(r => r.Name == "B"); Console.WriteLine(teams[ind].Name); Console.WriteLine(); //查找球队夺冠次数大于0的对象,并返回一个列表 List<FootballTeam> winners = new List<FootballTeam>(); winners = teams.FindAll(FootballTeam.FindWinnerCount); //也可以使用lambda表达式,代码如下: //winners = teams.FindAll(r => r.WinnerCount > 0); winners.ForEach(r => Console.WriteLine("{0} winner counts:{1}",r.Name,r.WinnerCount)); Console.ReadKey(); } }}
运行结果如下:
谢谢阅读!
Rember !You Make Luck !
- C# 在列表中按特性查找
- C# 在winform中查找控件
- Python 在列表list中查找特定的值
- 在VS2013 查找,在查找结果1中并未显示找到的内容的列表
- 在C#中定义和使用自己的特性
- 在C#中定义和使用自己的特性
- 在Visual C#中定义和使用自己的特性
- 在C#中定义和使用自己的特性
- C#中Obsolete特性
- C#中Obsolete特性
- C#中Obsolete特性
- 在C#中使用的Win32消息列表
- C#在ACCESS库中模糊查找记录
- 如何C#中实现在TreeView查找某一节点
- 如何C#中实现在TreeView查找某一节点
- C#中如何实现在TreeView模糊查找某一节点
- 如何在C#中实现treeview查找某一节点
- 如何C#中实现在TreeView查找某一节点
- Nginx-ngx_palloc
- UITOOLBAR的应用
- 在A20上演示老罗的Android硬件抽象层(HAL)概要介绍和学习计划1
- python手记(39)
- 【屌丝学习笔记】第五天 JAVA基础
- C# 在列表中按特性查找
- 在OpenCV中图像边界扩展 copyMakeBorder 的实现
- Android布局(三)------选择框RadioGroup、CheckBox
- 宋之富贾
- 比较完美地解决了Ubuntu下NVIDIA和Intel双显卡的问题! http://tieba.baidu.com/p/1462926619
- 如何运行用记事本写的java程序
- 【回复:致我团队中的程序员应聘者】
- WordPress中的__()和_e()函数的作用
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用