Linq起源

书籍,书籍集合,从书籍集合中查找符合条件的书籍 

(一)书籍

public   class  Book
{
   
public   int  Unid {  get set ; }
   
public   string  Name {  get set ; }
   
public   int  Price {  get set ; }
   
public   string  Publisher {  get set ; }
}

 

(二)书籍集合

public   static   class  BookHelper
{
    
public   static  IList < Book >  SearchBook(IList < Book >  list)
    {
        IList
< Book >  _list  =   new  List < Book > (); 
        
foreach  (Book book  in  list)
        {
           
if  (book.Price  <   100 )
              _list.Add(book);
        }
        
return  _list;
    }
}

 

从书籍集合中查找价格在100以下的书籍。这里采用了扩展方法。所以可以以

BookHelper.SearchBook的方式来调用方法

(三)测试

1)准备

IList < Book >  _list  =   new  List < Book > ();

[SetUp]
public   void  Init()
{
   _list.Add(
new  Book { Price  =   20 , Name  =   " book1 "  });
   _list.Add(
new  Book { Price  =   320 , Name  =   " book6 "  });
   _list.Add(
new  Book { Price  =   200 , Name  =   " book2 "  });
   _list.Add(
new  Book { Price  =   80 , Name  =   " book3 "  });
   _list.Add(
new  Book { Price  =   870 , Name  =   " book4 "  });
   _list.Add(
new  Book { Price  =   250 , Name  =   " book5 "  });
}

 

2)测试

[Test(Description = " 原始方法 " )]
public   void  TestOrigin()
{
    List
< Book >  _newList  =  BookHelper.SearchBook(_list)  as  List < Book > ;

   
foreach  (Book book  in  _newList)
      Console.WriteLine(book.Name);
}

 

(四)现在把价格判断分离到独立的方法

public   static  IList < Book >  SearchBook1(IList < Book >  list)
{
   IList
< Book >  _list  =   new  List < Book > ();

   
foreach  (Book book  in  list)
   {
      
if  (CheckCondition(book))
                _list.Add(book);
   }
   
return  _list;
}

public   static   bool  CheckCondition(Book book)
{
    
if  (book.Price  <   100 )
        
return   true ;
    
return   false ;
 }

 

(五)测试

[Test(Description  =   " 分离判断方法 " )]
public   void  TestOrigin1()
{
    List
< Book >  _newList  =  BookHelper.SearchBook1(_list)  as  List < Book >

    
foreach  (Book book  in  _newList)
        Console.WriteLine(book.Name);
}

 

(六)通过委托来传递判断方法

public   delegate   bool  DCheckCondition(Book book);
///   <summary>
///  传递分离的判断方法
///   </summary>
///   <param name="list"></param>
///   <returns></returns>
public   static  IList < Book >  SearchBook2(IList < Book >  list,DCheckCondition check)
{
    IList
< Book >  _list  =   new  List < Book > (); 

    
foreach  (Book book  in  list)
    {
        
if  (check(book))
           _list.Add(book);
    }

    
return  _list;
}

 

(七)测试

[Test(Description  =   " 传递分离的判断方法 " )]
public   void  TestOrigin2()
{
    List
< Book >  _newList  =  BookHelper.SearchBook2(_list,BookHelper.CheckCondition)  as  List < Book > ;

    
foreach  (Book book  in  _newList)
        Console.WriteLine(book.Name);
}

 

(八)自定义判断方法

[Test(Description  =   " 代理传递分离的判断方法 " )]
public   void  TestOrigin3()
 {
      List
< Book >  _newList  =  BookHelper.SearchBook2(_list, 
      
new  LOrigin.BookHelper.DCheckCondition(CheckCondition))  as  List < Book > ;

      
foreach  (Book book  in  _newList)
            Console.WriteLine(book.Name);


public   bool  CheckCondition(Book book)
{
   
if  (book.Price  <   100 )
        
return   true ;
   
return   false ;
}

 

(九)使用匿名方法来替换

[Test(Description  =   " 匿名方法 " )]
public   void  TestOrigin4()
{
    IList
< Book >  _newList  =  BookHelper.SearchBook2(_list, 
               
delegate (Book book) {  return  book.Price  <   100 ; });
    
foreach  (Book book  in  _newList)
        Console.WriteLine(book.Name);
}

 

(十)匿名方法符号化

[Test(Description  =   " 匿名方法的符号化 " )]
public   void  TestOrigin5()
{
    IList
< Book >  _newList  =  BookHelper.SearchBook2(_list,book  =>  book.Price  < 100 );
    
foreach  (Book book  in  _newList)
       Console.WriteLine(book.Name);
}

 

(十一)

[Test(Description  =   " IList的静态方法Where,并采用goes to " )]
public   void  TestOrigin6()
{
    IList
< Book >  _newList  =  _list.Where(book  =>  book.Price  <   100 ).ToArray < Book > ();

    
foreach  (Book book  in  _newList)
        Console.WriteLine(book.Name);
}

 

不管是IList还是IList都可以使用这个Where方法了但是做集合操作的时候我们不仅仅需要Where,还需要OrderByGroup等等,我想把所有的SQL能干的都移植过来。当然微软也意识到了这点,如是在.net 3.5里,微软发布了我们梦寐以求的Linq,将查询集成到语言里面来。它给IEnumerable添加了很多扩展方法,这样你可以很自然的去调用。你可以使用Reflector打开System.Core.dll,打开System.Linq命名空间,在这个命名空间里有一个Enumerable类,这里面就是微软为我们添加的扩展方法,看看,是不是SQL里所有的东西都可以在这里找到了

更多内容请见:http://kb.cnblogs.com/zt/linq/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值