• LINQ学习笔记(九)


    LINQ to objects

     

     

     

      LINQ to Objects是LINQ提供的最简单的一组功能,使用LINQ to Objects可以直接操作IEnumerable或IEnumerable<T>集合,而不需要LINQ提供程序或API。

    9.1  LINQ to Objects概述

        使用LINQ to Objects可以直接操作IEnumerable或IEnumerable<T>集合,而不需要LINQ提供程序或API。使用LINQ可以查询任何可枚举的集合,如数组、泛型列表List<T>、泛型字典Dictionary<T>等,以及用户自定义的集合。

    9.2  使用LINQ操作集合

         LINQ能够操作.NET Framework提供的绝大多数集合,如静态数组、动态数组、泛型列表、泛型排序列表、泛型双向列表、泛型队列、泛型堆栈、泛型哈希集、泛型字典、泛型排序字典、泛型通用集合、泛型绑定列表等。LINQ能够对这些集合实现筛选、排序、分组等功能。

         1 操作静态数组:静态数组是指长度不能改变的数组。如果数组的类型不是基础类型,那么在查询数组时,需要显式指定范围变量的类型,从而指定元素的特定类型。

         2 操作动态数组:动态数组是指长度可以修改的数组,如ArrayList等。和静态数组一样,如果动态数组的类型不是基础类型,那么在查询数组时,需要显式指定范围变量的类型,从而指定元素的特定类型

         3 操作泛型列表List<T>:泛型列表List<T>(T表示数据类型)能够通过索引访问对象的强类型列表。

         4 操作泛型排序列表SortedList<Tkey,TValue>

           泛型排序列表SortedList<TKey,Tvalue>是由”键/值”对(KeyValuePair<TKey,TValue>组成的集合,且集合中的元素按照键值进行排序。泛型排序列表SortedList<TKey,TValue>具有以下4个特点。

    (1)   SortedList<TKey,TValue>按键值进行排序,每一个元素为KeyValuePair<TKey,TValue>对象

    (2)   SortedList<TKey,TValue>中键不能修改,不能为空,且值唯一

    (3)   SortedList<TKey,TValue>中元素的值可以为空

    (4)   SortedList<TKey,TValue>使用比较器来实现排序和比较操作

         5 操作泛型双向链表LinkedList<T>

           泛型双向链表LinkedList<T>表示双向链表,它通过当前元素可以直接访问该元素的前一个(如果存在)和后一个元素(如果存在)。其中,元素的类型为LinkedListNode<T>。泛型双向链表LinkedList<T>具有以下3个特点:

    (1)   LinkedList<T>节点的类型为LinkedListNode<T>,并且每个节点向前指向Next节点,向后指向Previous节点

    (2)   LinkedList<T>可以根据当前节点直接操作该节点的前一个节点(如果存在)和后一个节点(如果存在)

    (3)   如果LinkedList<T>为空,则其First和Last属性的值也为空

         

    6  操作泛型队列Queue<T>

             泛型队列Queue<T>和普通队列一样,也是一种先进先出的线性表。队列的常用操作包括:元素入队(Enqueue()方法)、元素出队(Dequeue()方法)、清空队列(Clear()方法)等。泛型队列Queue<T>具有以下3个特点:

    (1)   加入元素到Queue<T>操作称为入队,从Queue<T>中删除元素操作称为出队

    (2)   Queue<T>具有先进先出的特点,即元素进入队列的顺序和元素从队列中删除元素的顺序一致

    (3)   Queue<T>允许具有重复的元素,而且还可以包含空元素

          7 操作泛型堆栈Stack<T>

            泛型堆栈Stack<T>和普通堆栈一样,也是一种限定在表尾进行插入和删除的线性表。堆栈的常用操作包括元素入栈(Push()方法)、元素出栈(Pop())方法、清空堆栈(Clear()方法)等。泛型堆栈Stack<T>具有以下3个特点:

    (1)   加入元素到Stack<T>操作称为入栈,从Stack<T>中删除元素操作称为出栈

    (2)   Stack<T>具有先进后出的特点,即元素进入堆栈的顺序和元素从堆栈中删除的顺序恰好相反

    (3)   Stack<T>允许具有重复的元素,且还可以包含空元素

           8 操作泛型哈希集HashSet<T>

             哈希集合HashSet<T>类基于集合的模型,可提供高性能集合运算,如并集、交集等。其访问方式类和Dictionary<TKey,TValue>或Hashtable集合类似。哈希集合Hash<T>具有以下3个特点:

    (1)   HashSet<T>集合不能包含重复元素

    (2)   HashSet<T>集合不考虑排序

    (3)   HashSet<T>提供多个集合操作,如并集、交集、补集等

           9 操作泛型字典Dictionary<TKey,TValue>

             泛型字典Dictionary<TKey,TValue>是由”键/值”对(KeyValuePair<TKey,TValue>)组成的集合,类似于现实中的字典。泛型字典具有以下4个特点:

    (1)   Dictionary<TKey,TValue>中的元素的类型为KeyValuePair<TKey,TValue>

    (2)   Dictionary<TKey,TValue>中的键不能修改、不能为空、且值唯一

    (3)   Dictionary<TKey,TValue>中的元素的值可以为空

    (4)   Dictionary<TKey,TValue>使用比较器来实现比较操作

          10 操作泛型排序字典SortedDictionary<TKey,TValue>

             泛型排序字典SortedDictionary<TKey,TValue>是由“键/值”对组成的集合,且集合中的元素按照键值进行排序。泛型排序字典具有以下4个特点:

    (1)   SortedDictionary<TKey,TValue>按键值进行排序,每一个元素为KeyValuePair<Tkey,TValue>对象

    (2)   SortedDictionary<TKey,TValue>中键是不能修改,不能为空,且值唯一

    (3)   SortedDictionary<TKey,TValue>中元素的值可以为空

    (4)   SortedDictionary<TKey,TValue>使用比较器来实现排序和比较操作

          11 操作泛型通用集合Collection<T>

             泛型通用集合Collection<T>和泛型列表List<T>非常相似,能够通过索引访问对象的强类型列表。特别地,Collection<T>类还可以作为集合类型的基类使用,用户可以使用该类派生自定义的集合类。泛型通用集合Collection<T>具有以下两个特点:

    (1)   访问Collection<T>中的元素可以通过索引实现,且索引从0开始

    (2)   Collection<T>类一般作为集合的基类,用户可以扩展该类实现自定义集合类

          12 操作泛型绑定列表BindingList<T>

             泛型绑定列表BindingList<T>能够提供支持数据绑定的泛型集合,它提供了IBindingList接口的具体泛型实现,可以用作创建双向数据绑定机制的基类,还可以通过AddNew()方法支持工厂创建的实例

    9.3  使用LINQ操作字符串

    使用LINQ不但可以操作集合,而且还可以操作字符串或字符串集合,

    从字符串中查找指定的字符、从文本中查找指定的字符串、统计单词出现

    的次数(词频统计)等。另外,使用LINQ还可以结合正则表达式来处理字

    符串。

    (1)   查找指定的字符

    (2)   查找指定的字符串

    (3)   词频统计(统计给定文本中每一个单词出现的次数)

    (4)   使用正则表达式处理字符串

    9.4  使用LINQ操作文件目录

         在Windows文件系统中,往往需要在文件夹(或文件目录)中查询指定名称的文件、指定属性的文件、指定扩展名的文件等。这些操作往往都是查询操作,因此非常适合使用LINQ实现。本小节介绍使用LINQ操作文件目录的方法,如统计文件的大小、比较两个文件夹是否存在相同文件、查找指定名称(或扩展名、属性)的文件等。

    (1)   查询指定名称的文件(从指定目录中查询指定名称的文件)

    (2)   查询指定扩展名的文件

    (3)   查询指定属性的文件

    (4)   统计文件夹的大小

    (5)   比较两个文件夹下是否存在同名文件

    (6)   查询文件夹所有文件的内容

  • 相关阅读:
    Android 如何处理崩溃的异常
    体验下Xcode5与ios7
    IOS 改变导航栏返回按钮的标题
    android之HttpURLConnection
    android异步加载图片
    android 从服务器上获取APK下载安装
    android AsyncTask异步下载并更新进度条
    android 四种堆状态
    Windows Azure 的开源 DNA
    mysql 只给更新表的某个字段的授权
  • 原文地址:https://www.cnblogs.com/BigSeaHorse/p/LINQ_Study_9.html
Copyright © 2020-2023  润新知