免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2795 | 回复: 0
打印 上一主题 下一主题

List 泛型 集合中 Find 的用法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-26 19:39 |只看该作者 |倒序浏览

以前在开发中为了对List,String[].Array进行元素的查找一般都是这样做:
List lists = new List();
list.add("111");
.....
for(int i=0;i
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()
        {
            ListString> strlist = new ListString>();
            strlist.Add("WPF");
            strlist.Add("WCF");
            strlist.Add("WF");
            strlist.Add("Author");
            strlist.Add("WinFx");
            strlist.Add("Linq");
            PredicateString> FindValues = delegate(String list)
            {
                return list.Equals("WinFx") ? true : false;
            };
            Console.WriteLine("Result: ---FindIndex---  " + strlist.FindIndex(FindValues) + "  ----------");
            Console.WriteLine("Result: ---Exists----  " + strlist.Exists(FindValues) + "  ----------");
            
            ListString> 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"));
            PredicateValueClass> FindValue = delegate(ValueClass obj) { return obj.Value == "Author"; };
            Console.WriteLine("Result: ----------  " + lists.Values.FindIndex(FindValue) + "  ----------");
            Console.WriteLine("將所有資料列出");
            int idx = 0;
            ActionValueClass> 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 ListValueClass> _values = new ListValueClass>();
            public ListValueClass> Values
            {
                get { return _values; }
            }
            public ListClass() { }
        }
        #endregion

*Predicate 是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回 true。当前 List 的元素被逐个传递给 Predicate 委托,在找到匹配项时停止处理。此方法执行线性搜索;
还有就是有关于List其他的一些查找方法:
1.当需要依条件来寻找集合内的某个类别时, 可用ListT>Find(), ListT>FindLast()来搜寻, 回传搜寻到的类别
2.当需要依条件来寻找集合内的某些类别时, 可用ListT>FindAll()来搜寻, 将回传一个新的ListT>对象集合
3.当需要依条件来寻找集合内的某个类别的索引值时, 可用ListT>FindIndex(), ListT>FindLastIndex()
4.ListT>Find(), ListT>FindLast()的不同是, ListT>Find()由Index=0开始寻找, 而ListT>FindLast()由Index = ListT>.Count - 1开始寻找
同理, ListT>FindIndex(), ListT>FindLastIndex()也是一样, 不同的是, 这两个回传的是索引值
5.当使用ListT>Find()相关函示时, 必须delegate.这个PredicateT>
其内容就是搜寻的判断式, 如:
Predicateclass1> FindJaofeng = delegate(class1 obj) {
  return obj.Value == "Jaofeng";
};
return type为boolean值
而上面也有介绍一个ListT>.ForEach(), 这个Method只是将原本我们用foreach()的方式, 简化而已
譬如原本的习惯写法:
foreach (class1 cls in myText.Values) {
    //

Do something
}
// 现在变成
Actionclass1> 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");


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/41814/showart_1093234.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP