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("\nTake方法输出查询结果的前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("\nTakeWhile 带索引参数");
//输出名字字数小于等于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("\nTake方法跳过查询结果的前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("\nSkipWhile跳过名字小于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("\n\n去除重复元素的数组");
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("\n\n去除重复元素的数组,实现自定义IEqualityComparer<T>");
foreach (var name in names.Distinct(new MyEqualityComparer<string>()))
{
Console.Write(name + " ");
}
}

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

最新文章

  1. android 之 启动画面的两种方法
  2. the fourth class
  3. java-读properties配置文件
  4. 【转】使用C#实现ADSL自动拨号
  5. How to: Host and Run a Basic Windows Communication Foundation Service
  6. MVC中的URL路由(一)
  7. 20151217--Ajax的一点补充
  8. codevs 3013 单词背诵 hash
  9. BZOJ 3314: [Usaco2013 Nov]Crowded Cows( 单调队列 )
  10. Form表单中method=post/get两种数据传输的方式的区别
  11. Lintcode208 Assignment Operator Overloading (C++ Only) solution 题解
  12. 使用生成器把Kafka写入速度提高1000倍
  13. Bootstrap3 栅格系统-实例:多余的列(column)将另起一行排列
  14. final和static关键字
  15. easyui-tree-url-param
  16. 别人的Linux私房菜(6)文件权限与目录配置
  17. Async:简洁优雅的异步之道
  18. 【Cmd】那些年,我们迷恋的cmd命令(一)
  19. 02_Spark Application不同模式下的监控
  20. setTimeOut函数和setInterval函数

热门文章

  1. POJ 2718 Smallest Difference(最小差)
  2. 4、Ansible(tags、roles)
  3. 2、Python程序控制结构(0530)
  4. python学习 day15打卡 初识面向对象
  5. 【Ruby】【高级编程】面向对象
  6. 蚂蚁金服首席数据科学家漆远:AI技术开放,与业界融合共创
  7. P1547 Out of Hay
  8. linux df
  9. 设计模式(一)Chain Of Responsibility责任链模式
  10. [原][spark]帧序列的纹理UV索引,修改spark源码,改变纹理索引方式,支持常规帧序列