在List范型集合中实现自定义条件复杂查询 .

转载 2012年03月23日 01:42:14
说明:在List<T>范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
作者:周公
日期:2007-12-28(没办法,去年写好的文章,因为csdn的博客不行,拖到今年发了
 首发地址:http://blog.csdn.net/zhoufoxcn

using System;
using System.Collections.Generic;
using System.Text;

namespace ListDemo
{
    
/// <summary>
    
/// 首发地址:http://blog.csdn.net/zhoufoxcn
    
/// 大类别
    
/// </summary>
    public class CatalogInfo
    {
        
private int catalogId;
        
private string catalogName;

        
public string CatalogName
        {
            
get { return catalogName; }
            
set { catalogName = value; }
        }
    
        
public int CatalogId
        {
            
get { return catalogId; }
            
set { catalogId = value; }
        }

        
public CatalogInfo(int catalogId, string catalogName)
        {
            
this.catalogId = catalogId;
            
this.catalogName = catalogName;
        }
    
    }
}

 
using System;
using System.Collections.Generic;
using System.Text;

namespace ListDemo
{
    
/// <summary>
    
/// 首发地址:http://blog.csdn.net/zhoufoxcn
    
/// 查找符合特定条件的CatalogInfo类
    
/// </summary>
    public class CatalogFinder
    {
        
private int catalogId;

        
public int CatalogId
        {
            
get { return catalogId; }
            
set { catalogId = value; }
        }

        
public CatalogFinder()
        {
        }
    
        
public CatalogFinder(int catalogId)
        {
            
this.catalogId = catalogId;
        }
        
/// <summary>
        
/// 符合Predicate&gt;T&lt; match的方法
        
/// </summary>
        
/// <param name="info"></param>
        
/// <returns></returns>
        public bool FindByCatalogId(CatalogInfo info)
        {
            
return info.CatalogId == catalogId;
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Text;

namespace ListDemo
{
    
/// <summary>
    
/// 首发地址:http://blog.csdn.net/zhoufoxcn
    
/// 小类别
    
/// </summary>
    public class BoardInfo
    {
        
private int boardId;
        
private string boardName;
        
private int catalogId;
        
/// <summary>
        
/// 所在大类别编号
        
/// </summary>
        public int CatalogId
        {
            
get { return catalogId; }
            
set { catalogId = value; }
        }
    

        
public string BoardName
        {
            
get { return boardName; }
            
set { boardName = value; }
        }
    
        
public int BoardId
        {
            
get { return boardId; }
            
set { boardId = value; }
        }

        
public BoardInfo(int boardId, string boardName, int catalogId)
        {
            
this.boardId = boardId;
            
this.boardName = boardName;
            
this.catalogId = catalogId;
        }
    
    }
}

上面分别是两个范型集合中用到的实体,以及将来要用于查找这些实体的辅助类,下面距离说明用法:
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using ListDemo;

/// <summary>
/// 说明:在List<T>范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
/// msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
/// 这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
/// 一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
/// 一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
/// 作者:周公
/// 日期:2007-12-28
/// 首发地址:http://blog.csdn.net/zhoufoxcn
/// </summary>
public class Example
{
    
public static void Main()
    {
        
//初始化大类别集合
        List<CatalogInfo> catalogList = new List<CatalogInfo>(10);
        
for (int i = 0; i <10; i++)
        {
            catalogList.Add(
new CatalogInfo(i, "大类别" + i));
        }

        
//初始化小类别集合,随机指定它们的大类别编号
        List<BoardInfo> boardList = new List<BoardInfo>(50);
        Random random
=new Random(100);
        
for (int i = 0; i < 100; i++)
        {
            boardList.Add(
new BoardInfo(i, "小类别" + i, random.Next() % 10));
        }
        Console.WriteLine(
"=======在大类别中查找========");
        CatalogFinder catalogFinder 
= new CatalogFinder(5);
        CatalogInfo catalogInfo 
= catalogList.Find(catalogFinder.FindByCatalogId);
        Console.WriteLine(
"该大类别的名称:" + catalogInfo.CatalogName);

        Console.WriteLine(
"=======在小类别中查找========");
        BoardFinder boardFinder 
= new BoardFinder();
        boardFinder.BoardId 
= 25;
        BoardInfo boardInfo 
= boardList.Find(boardFinder.FindByBoardId);
        Console.WriteLine(
"该小类别信息:小类别名称{0},所属大类别编号{1}", boardInfo.BoardName, boardInfo.CatalogId);

        Console.WriteLine(
"=======在小类别中按大类别编号查找========");
        boardFinder.CatalogId 
= 9;
        List
<BoardInfo> boardInfoList = boardList.FindAll(boardFinder.FindByCatalogId);
        
foreach (BoardInfo info in boardInfoList)
        {
            Console.WriteLine(
"该小类别信息:小类别名称{0},所属大类别编号{1}", info.BoardName, info.CatalogId);
        }

    
        Console.ReadLine();
    }
}
以下是输出结果:

相关文章推荐

Java自定义范型的应用技巧

我们在JAVA中 处处都用到了 范型 ,JAVA中的范型是从C++模板继承来的,不过  JAVA的 范型的功能 远远没有 C++那么强大 。 我们知道在C++中 模板可以很方便的代替任意类型的数据 ...

java工具类之将map范型集合转化为list的有序集合工具类

在项目开发当中,不断形成通用的类库或者说工具库,对于以后代码重用,提高项目的开发效率和质量都是至关重要的。后续会发布java工具类系列文章,希望对各位开发者有开发方面的帮助。     本篇介绍的是将m...

使用Comparable、Comparator接口实现对对象数组、List集合自定义排序

使用Comparable、Comparator接口实现对对象数组、List集合的自定义排序。

java中List范型使用总结

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

c#范型List的Sort方法详解

.net中的范型List类的Sort方法有四种形式,分别是   1,不带有任何参数的Sort方法----Sort();   2,带有比较器参数的Sort方法 ----Sort(IComparer)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)