以前在开发中为了对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.供大家参考,以及和大家进行交流。
static void Main(string[] args) { //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 委托,在找到匹配项时停止处理。此方法执行线性搜索;
还有就是有关于List其他的一些查找方法: 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");
转载于:https://www.cnblogs.com/c-x-a/p/6179355.html
相关资源:JAVA上百实例源码以及开源项目