zoukankan      html  css  js  c++  java
  • 查找List,Array中元素的其他C#写法

    以前在开发中为了对List,String[].Array进行元素的查找一般都是这样做:
    List<String> lists = new List<String>();
    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<t>.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");
  • 相关阅读:
    linux笔记八---------文件查找
    linux笔记七---------管道
    linux笔记六-------文件权限设置
    linux笔记五-------编辑器
    linux笔记四-------用户和组的管理
    linux笔记三-------根目录相关说明
    linux笔记二-----目录及文件命令
    linux笔记一
    thinkphp框架验证码验证一次
    MarkDown 中使用 LaTeX 数学式
  • 原文地址:https://www.cnblogs.com/RuiLei/p/788568.html
Copyright © 2011-2022 走看看