C# 链表去重 List 一维 二维 分别使用 Distinct() GroupBy() 方法

分别使用过List中Distinct(),GroupBy()实现链表的去重。

1.先上效果:

一维链表中分别有元素“aa”,"bb",‘aa‘,‘aa‘,"cc",使用Distinct()方法后输出 aa,bb,cc

二维链表中类型为ClassA类型,其中对象的属性A分别为1,1,2,3,1,使用GroupBy()方法实则是分类,输出Key值分别为1,2,3。

2.上代码,类ClassA

 1         class ClassA
 2         {
 3             private int a;
 4             public int A
 5             {
 6                 get { return a; }
 7                 set { a = value; }
 8
 9             }
10
11             private string b;
12             public string B
13             {
14                 get { return b; }
15                 set { b = value; }
16
17             }
18         }

主函数,分别打印一维链表,二维链表去重后输出的值。

 1 static void Main(string[] args)
 2         {
 3             //1.一维链表去重复(Distinct方法)
 4             List<string> lst1 = new List<string>() { "aa", "bb", "cc", "aa", "bb" };
 5             List<string> lst1Distinct = lst1.Distinct().ToList();
 6
 7             StringBuilder sb1 = new StringBuilder();
 8             sb1.Append("一维链表去重:");
 9             foreach (var item in lst1Distinct)
10             {
11                 sb1.Append(item);
12                 sb1.Append("-");
13             }
14             Console.WriteLine(sb1.ToString());//结果为 aa-bb-cc-
15
16             //2.二维链表去重(GroupBy方法)
17             List<ClassA> lst2 = new List<ClassA>();
18             lst2.Add(new ClassA() { A = 1, B = "aa" });
19             lst2.Add(new ClassA() { A = 1, B = "bb" });
20             lst2.Add(new ClassA() { A = 2, B = "aa" });
21             lst2.Add(new ClassA() { A = 3, B = "aa" });
22             lst2.Add(new ClassA() { A = 1, B = "cc" });
23             var lst2Distinct = lst2.GroupBy(r => r.A);//根据属性A分组
24             StringBuilder sb2 = new StringBuilder();
25             sb2.Append("二维链表去重:");
26             foreach (var item in lst2Distinct)
27             {
28                 sb2.Append(item.Key.ToString());
29                 sb2.Append("-");
30             }
31             Console.WriteLine(sb2.ToString());//结果为1-2-3-
32             Console.Read();
33         }
时间: 2025-01-11 14:09:34

C# 链表去重 List 一维 二维 分别使用 Distinct() GroupBy() 方法的相关文章

c++ 依据输入动态声明数组(一维,二维)

较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #include <stdio.h> #include <stdlib.h> int main() { int a; int i; scanf("%d",&a); int c[a]; for( i =0 ;i<a;i++) scanf("%d",

[blog 机器视觉]一维二维码的提取、识别和产生

一维二维码的提取.识别和产生 零.相关说明: 在"jsxyhelu.cnblogs.com/机器视觉"栏目主要介绍和图像处理和机器视觉相关的的成套的解决方案.思路和软件集.希望能够为大家在实际工作中解决具体问题提供一些帮助. 一.背景资料: 现在一维码.二维码广泛使用于工业各方面.很多和图像处理相关的需求也有所涉及.这里也看过一些论文,里面有一些方法还是art-of-air的,也有一些具备一定参考价值.这里只是谈一谈一般情况下的提取和识别.对于特殊情况,肯定要特殊对待,其实本身是一个增

二维码生成及读取方法

二维码的制作主要是引用第三方的程序集ThoughtWorks.QRCode.dll,调用QRCodeEncoder的Encode方法得到一个Bitmap图:相反,解析二维码就是用的Decode方法. 如下示例生成二维码的方法: /// <summary> /// 生成不带logo的二维码图片 /// </summary> /// <param name="data">要生成二维码的字符串</param> /// <returns&g

PHP生成带logo图像二维码的两种方法

本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $urlToEncode="http://www.php.cn"; generateQRfromGoogle($urlToEncode); /**

最大值子区间和的一维二维问题

一维问题:nyoj 44 子串和 链接:click here 题目大意:给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n. 思路:m是元素总个数,sum是第一个元素,将当前的第一个元素作为最大值max,之后依次输入,检查sum<0?是的话更新sum为当前输入值:否则累加,最后比较这样每次步骤的最大值. 代码: #include <stdio.h> #include <mat

稳定排序nlogn之归并排序_一维,二维

稳定排序:排序时间稳定的排序 稳定排序包括:归并排序(nlogn),基数排序[设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排序的时间复杂度为O(d(n+radix)) ],冒泡排序(n^2),插入排序(n^2),交换排序(n^2),计数排序[n为数字个数,k为数字范围,O(n+k)]等. Problem:对n个数进行排序,n<=100000,1s以内 正常来说我们都用qsort(c),sort(c++),但快速排序平均时间复杂度为nlogn,最坏时间复杂度为n^

【树状数组】树状数组一维二维模板

以下模板都是点更新,区间查询,如果是区间更新点查询,只需将利用lowbit的循环方向倒过来 一维: inline int lowbit(int x) { return x & -x; } void add(int x, int val) { for(int i = x; i <= n; i += lowbit(i)) C[i] += val; } int sum(int x) { int ret = 0; for(int i = x; i > 0; i -= lowbit(i)) re

一维 + 二维树状数组 + 单点更新 + 区间更新 详解

树状数组详解: 假设一维数组为A[i](i=1,2,...n),则与它对应的树状数组C[i](i=1,2,...n)是这样定义的: C1 = A1 C2 = A1 + A2 C3 = A3 C4 = A1 + A2 + A3 + A4 C5 = A5 C6 = A5 + A6 ................. C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 ................ 如图可知: 为奇数的时候他是代表他本身,而为偶数的时候则是代表着自

资瓷区间修改+区间求和的树状数组(一维/二维)

一维:令 \(v_i\) 为差分数组,那么 \([0, k]\) 的前缀和就是 \(\sum{v_i(k+1-i)} = (k+1) \cdot \sum{v_i} + \sum{v_i \cdot (-i)}\),树状数组维护一下 \(v_i\) 和 \(v_i \cdot i\) 即可. template <typename I> struct Fenwick { struct Node { I v0, v1; void add(I d0, I d1) { v0 += d0; v1 +=