List 泛型 集合中 Find 的用法
以前在开发中为了对List,String[].Array进行元素的查找一般都是这样做:
List lists = new List();
list.add("111");
.....
for(int i=0;i<list.length;i++)
{
if(list[i].equals("要查找的元素"))
{....}
}
其实在C# 2.0对List,Array元素的查找,MS已经提供了一些泛型方法,让Coding人员更好的查找,遍历,等等...
以下是我简单对List的一些操作所写的Demo.供大家参考,以及和大家进行交流。
{
//Prdicate用法
//第一种用法:[不创建显式的委托,也不创建指定泛型方法的类型参数]
ListOneMethod();
//Prdicate用法
//第二种用法:[创建显式的委托,也创建指定泛型方法的类型参数]
ListTwoMethod();
//第三种用法:[同于第二种方法,但用了两个类进行区分]
ListThreeMethod();
}
#region 第一种用法
private static void ListOneMethod()
{
String[] strs = { "WPF", "WCF", "WF", "Author", "WinFx", "Linq" };
String Name = Array.Find(strs, FindWhere);
Console.WriteLine("Result: ---------- " + Name + " ----------");
}
public static Boolean FindWhere(String str)
{
return str.Equals("Author") ? true : false;
}
#endregion
#region 第二种用法
private static void ListTwoMethod()
{
List<String> strlist = new List<String>();
strlist.Add("WPF");
strlist.Add("WCF");
strlist.Add("WF");
strlist.Add("Author");
strlist.Add("WinFx");
strlist.Add("Linq");
Predicate<String> FindValues = delegate(String list)
{
return list.Equals("WinFx") ? true : false;
};
Console.WriteLine("Result: ---FindIndex--- " + strlist.FindIndex(FindValues) + " ----------");
Console.WriteLine("Result: ---Exists---- " + strlist.Exists(FindValues) + " ----------");
List<String> lists = strlist.FindAll(FindValues);
foreach (string str in lists)
{
Console.WriteLine("Result: ---FindAll----- " + str + " ----------");
}
Console.WriteLine("Result: ---FindLast---- " + strlist.FindLast(FindValues) + " ----------");
Console.WriteLine("Result: ---FindLastIndex-- " + strlist.FindLastIndex(FindValues) + " ----------");
Console.WriteLine("Result: ---RemoveAll-- " + strlist.RemoveAll(FindValues) + " ----------");
Console.WriteLine("Result: ---TrueForAll- " + strlist.TrueForAll(FindValues) + " ----------");
}
#endregion
#region 第三种用法
private static void ListThreeMethod()
{
ListClass lists = new ListClass();
// 使用List.Add()方法來新增集合內容
lists.Values.Add(new ValueClass("WPF"));
lists.Values.Add(new ValueClass("WCF"));
lists.Values.Add(new ValueClass("WF"));
lists.Values.Add(new ValueClass("Author"));
lists.Values.Add(new ValueClass("WinFx"));
lists.Values.Add(new ValueClass("Linq"));
Predicate<ValueClass> FindValue = delegate(ValueClass obj) { return obj.Value == "Author"; };
Console.WriteLine("Result: ---------- " + lists.Values.FindIndex(FindValue) + " ----------");
Console.WriteLine("將所有資料列出");
int idx = 0;
Action<ValueClass> ListAll = delegate(ValueClass obj)
{
Console.WriteLine(string.Format("第 {0} 個的Value值為 {1}", idx, obj.Value));
idx++;
};
lists.Values.ForEach(ListAll);
}
public class ValueClass
{
private string _value = string.Empty;
public string Value
{
get { return _value; }
}
public ValueClass(string value)
{
_value = value;
}
}
public class ListClass
{
private List<ValueClass> _values = new List<ValueClass>();
public List<ValueClass> Values
{
get { return _values; }
}
public ListClass() { }
}
#endregion
*Predicate 是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回 true。当前 List 的元素被逐个传递给 Predicate 委托,在找到匹配项时停止处理。此方法执行线性搜索;
1.当需要依条件来寻找集合内的某个类别时, 可用List<T>Find(), List<T>FindLast()来搜寻, 回传搜寻到的类别
2.当需要依条件来寻找集合内的某些类别时, 可用List<T>FindAll()来搜寻, 将回传一个新的List<T>对象集合
3.当需要依条件来寻找集合内的某个类别的索引值时, 可用List<T>FindIndex(), List<T>FindLastIndex()
4.List<T>Find(), List<T>FindLast()的不同是, List<T>Find()由Index=0开始寻找, 而List<T>FindLast()由Index = List<T>.Count - 1开始寻找
同理, List<T>FindIndex(), List<T>FindLastIndex()也是一样, 不同的是, 这两个回传的是索引值
5.当使用List<T>Find()相关函示时, 必须delegate.这个Predicate<T>
其内容就是搜寻的判断式, 如:
Predicate<class1> FindJaofeng = delegate(class1 obj) {
return obj.Value == "Jaofeng";
};
return type为boolean值
而上面也有介绍一个List<T>.ForEach(), 这个Method只是将原本我们用foreach()的方式, 简化而已
譬如原本的习惯写法:
foreach (class1 cls in myText.Values) {
//
Do something}
// 现在变成
Action<class1> ActionName = delegate(class1 obj) {
//
Do something};
myText.Values.ForEach(ActionName);
查找DropDownList中的Item的
ListItemCollection items = DisplayModeDropdown.Items;
查找 Index:
int selectedIndex = items.IndexOf(items.FindByText("需要查找匹配的item"));
查找 Value:
string selectedValue = items.FindByText("需要查找匹配的item");List 泛型 集合中 Find 的用法的更多相关文章
- C# List泛型集合中的GroupBy<>用法
//根据子项目id得到flowjump实体类 flowJumps = this.FlowJumps; //按工序groupby flowjumps IEnumerable<IGrouping&l ...
- C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)
最近在做WCF,因为是内部接口,很多地方直接用的弱类型返回(DataSet),这其实是一种非常不好的方式,最近将项目做了修改,将所有接口返回值都修改成强类型,这样可以减少很多与客户端开发人员的沟通,结 ...
- C# 找出泛型集合中的满足一定条件的元素 List.Wher()
在学习的过程中,发现泛型集合List<T>有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享. 1.关于Func<> Fun ...
- 泛型集合List的详细用法
命名空间: System.Collections.Generic List<T>类是 ArrayList 类的泛型等效类. 该类使用大小可 按需动态增加 的数组实现 IList& ...
- Java集合中List的用法
List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列. List可以精确的控制每个元素的插入位置 ...
- C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能
.Net为我们提供了众多的泛型集合.比如,Stack<T>先进后出,Queue<T>先进先出,List<T>集合元素可排序,支持索引,LinkedList<T ...
- C# Synchronized 和 SyncRoot 实现线程同步的源码分析及泛型集合的线程安全访问
转载:http://blog.csdn.net/zztfj/article/details/5640889 Synchronized vs SyncRoot 我们知道,在.net的一些集合类型中,譬如 ...
- C# DataSet装换为泛型集合
1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应) #region DataSet装换为泛型集合 /// <summary> /// 利用反射和 ...
- C#泛型集合之Dictionary<k, v>使用技巧
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...
随机推荐
- IOS:Safari不兼容Javascript中的Date问题
在IOS5以上版本(不包含IOS5)中的Safari浏览器能正确解释出Javascript中的 new Date('2013-10-21') 的日期对象. 但是在IOS5版本里面的Safari解释ne ...
- visual studio 调试时遇到 System.BadImageFormatException
System.BadImageFormatException”类型的未经处理的异常在 未知模块. 中发生 其他信息: 未能加载文件或程序集“SendYourIP.exe”或它的某一个依赖项.生成此程序 ...
- MFC与C#连接MYSQL乱码问题
MYSQL数据库编码为:latin1 问题现象:插入中文乱码,及用中文作参数无法得到相应数据 如select * from userinfo where username='李小明' MFC中解决方法 ...
- 从感知器到SVM
这篇文章主要是分析感知器和SVM处理分类问题的原理,不涉及求解 感知器: 感知器要解决的是这样的一个二分类问题:给定了一个线性可分的数据集,我们需要找到一个超平面,将该数据集分开.这个超平面的描述如下 ...
- JS获取地址栏参数的方法
1. window.location.href 2.正则方法 function getUrlParam(name) { var reg = new RegExp("(^|&)&quo ...
- lsyncd 实时同步
1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify + rsync,但随着文件数量的增大到100W+,目录下的 ...
- boost timer 定时器 Operation cancel !
前面段时间处理一个定时器时,老是提示 操作取消. 硬是没搞明白为什么! 其实我遇到的这个情况很简单就是(boost::asio::deadline_timer timer)这个变量的生命同期结束了,对 ...
- Unity3D 事件
unity3d事件函数整理,事件,回调函数,消息处理 Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Star ...
- 尚学堂Spring视频教程(四):使用Annotation
之前我们的bean都配置在XML里,并且通过bean的property标签来指定依赖关系,如果项目很大,那岂不是要配置很多这样的property标签?Spring提供了注解的方式来解决这个问题 @Au ...
- pip China
建个文件 ~/.pip/pip.conf, 内容如下 [global] index-url = http://b.pypi.python.org/simple [install] use-mirror ...