zoukankan      html  css  js  c++  java
  • LINQ 中常用函数使用: Take TakeWhile Skip SkipWhile Reverse Distinct

    1,Take 方法

    Take方法用于从一个序列的开头返回指定数量的元素
    string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };

    //直接输出前3个元素
    Console.WriteLine("Take方法直接输出前3个元素");
    foreach (var name in names.Take(3))
    {
    Console.WriteLine(name);
    }
    var query = from n in names
    where n.Length == 2
    select n;
    Console.WriteLine(" Take方法输出查询结果的前1个元素");
    foreach (var s in query.Take(1))
    {
    Console.WriteLine(s);
    }

    2,TakeWhile 方法

    TakeWhile方法获取序列中从开头起符合条件的元素,直到遇到不符合条件的元素为止的所有元素。条件代理部分有两种形
    式:

    Func<TSource, bool> predicate

    Func<TSource, int, bool> predicate 第二个参数是元素的索引

    注意:当条件为假时,就停止了,后面的元素不会输出。

    string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };

    //输出名字小于4个字的元素
    var takeNames = names.TakeWhile(n => n.Length < 4);
    foreach (var name in takeNames)
    {
    Console.WriteLine(name);
    }
    Console.WriteLine(" TakeWhile 带索引参数");
    //输出名字字数小于等于4 并且索引小于4的元素
    foreach (var name in names.TakeWhile((n, i) => n.Length <= 4 && i < 4))
    {
    Console.WriteLine(name);
    }

    3,Skip 方法

    Skip方法用于跳过序列中指定个数的元素
    string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };

    //跳过前3个元素
    Console.WriteLine("Take方法跳过前3个元素");
    foreach (var name in names.Skip(3))
    {
    Console.WriteLine(name);
    }
    var query = from n in names
    where n.Length == 2
    select n;
    Console.WriteLine(" Take方法跳过查询结果的前1个元素");
    foreach (var s in query.Skip(1))
    {
    Console.WriteLine(s);
    }

    4,SkipWhile 方法

    SkipWhile 方法用于只要满足指定的条件,就跳过序列中得元素。

    注意:当遇到条件为假时,就停止跳越了,输出剩余的所有元素。
    string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };

    Console.WriteLine("SkipWhile跳过名字为2个字的元素");
    foreach (var name in names.SkipWhile(n => n.Length == 2))
    {
    Console.WriteLine(name);
    }

    Console.WriteLine(" SkipWhile跳过名字小于4个字,并且索引小于2");
    foreach (var s in names.SkipWhile((n, i) => n.Length < 4 && i < 2))
    {
    Console.WriteLine(s);
    }

    5,Reverse 方法
    Reverse 方法用于反转序列中的元素。
    string[] names = { "郭靖", "李莫愁", "欧阳晓晓", "黄蓉", "黄药师" };

    foreach (var name in names.Reverse())
    {
    Console.WriteLine(name);
    }

    6,Distinct 方法

    Distinct 方法用于去除重复元素。
    string[] names = { "郭靖", "郭靖", "李莫愁", "欧阳晓晓", "欧阳晓晓", "黄蓉", "黄药师" };

    Console.WriteLine("含有重复元素的数组");
    foreach (var name in names)
    {
    Console.Write(name + " ");
    }
    Console.WriteLine(" 去除重复元素的数组");
    foreach (var name in names.Distinct())
    {
    Console.Write(name + " ");
    }

    自定义IEqualityComparer<T>接口的相等比较器

    public class MyEqualityComparer<T> : IEqualityComparer<T>
    {
    #region IEqualityComparer<T> 成员

    public bool Equals(T x, T y)
    {
    string temp = x as string;
    if (temp != null)
    {
    if (temp == "欧阳晓晓") //对"欧阳晓晓"不过滤
    return false;
    }
    if (x.GetHashCode() == y.GetHashCode())
    return true;
    else
    return false;
    }

    public int GetHashCode(T obj)
    {
    return obj.GetHashCode();
    }

    #endregion
    }
    private void DistinctDemo()
    {
    string[] names = { "郭靖", "郭靖", "李莫愁", "欧阳晓晓", "欧阳晓晓", "黄蓉", "黄药师" };

    Console.WriteLine("含有重复元素的数组");
    foreach (var name in names)
    {
    Console.Write(name + " ");
    }
    Console.WriteLine(" 去除重复元素的数组,实现自定义IEqualityComparer<T>");
    foreach (var name in names.Distinct(new MyEqualityComparer<string>()))
    {
    Console.Write(name + " ");
    }
    }

    对某个个例对象排除进行去重 

  • 相关阅读:
    SNF软件开发机器人-子系统-功能-启用大按钮样式如何配置
    SNF软件开发机器人-子系统-功能-数据录入方式
    SNF软件开发机器人-子系统-功能-功能类型(普通表改为树型表)
    SNF软件开发机器人-子系统-导出-导入功能-多人合作时这个功能经常用到
    SQL SERVER数据库删除LOG文件和清空日志的方案
    打不开磁盘“I:xxx.vmdk”或它所依赖的某个快照磁盘
    chrome浏览器解决跨域问题
    AngularJS判断checkbox/复选框是否选中并实时显示
    非常全的VsCode快捷键
    Oracle&SQLServer中实现跨库查询
  • 原文地址:https://www.cnblogs.com/mmbbflyer/p/7766845.html
Copyright © 2011-2022 走看看