相关文章推荐
留胡子的扁豆  ·  sql ...·  昨天    · 
不拘小节的汉堡包  ·  String.prototype.trim( ...·  1小时前    · 
苦闷的生姜  ·  ECG R-wave peaks ...·  1 月前    · 
爱笑的回锅肉  ·  SQL Server SSL/TLS 加密 ...·  7 月前    · 
深沉的书包  ·  httpContext.User.Ident ...·  1 年前    · 

C# 小技巧 —— 用 List.Contains 方法筛除重复项

一、程序功能

此程序主要是把 List<T> 列表类对象中的所有重复项都删除并输出,如果有需要,也可以把重复的项另外输出来供研究。

举个例子,比如 List 对象有如下的元素:

List < string > strList = new List < string > { "car" , "bike" , "truck" , "car" , "plane" , "car" , "truck" , };

经过处理,输出的结果是:

Car bike truck plane

主要的代码如下,新建一个tempList变量用于存储新链表,然后利用List<T>.Contains方法判断是否重复:

List < string > tempList = new List < string >();

Console .WriteLine( "正在处理..." );

foreach ( string s in strList)

if (!tempList.Contains(s))

tempList.Add(s);

此方法的好处是代码比较简洁,缺点是要额外的储存tempList链表变量的空间。另外经过实测,Contains方法比较耗时,在链表数量比较大的时候,比如strList有几万几十万个元素的时候,运行比较慢。

如果要知道哪些项目是重复的,可以如下略做改动,可以输出重复的元素:

foreach ( string s in strList)

if (!tempList.Contains(s))

tempList.Add(s);

Console .WriteLine(s + "是重复项" );

就是加了个else进行判断。

二、程序测试代码

List < string > strList = new List < string > { "car" , "bike" , "truck" , "car" , "plane" , "car" , "truck" , };

List < string > tempList = new List < string >();

Console .WriteLine( "原链表如下:" );

foreach ( string s in strList)

Console .WriteLine(s);

Console .WriteLine( "正在处理..." );

foreach ( string s in strList)

if (!tempList.Contains(s))

tempList.Add(s);

Console .WriteLine(s + "是重复项" );

Console .WriteLine( "不重复的链表如下:" );

foreach ( string s in tempList)

Console .WriteLine(s);

Keep the console window open in debug mode.

Console .WriteLine( "Press any key to exit." );

Console .ReadKey();

泛型 List <T>中有一个比较列表是否已包含对象的 方法 Contains <T>(),今天在网上搜了一个用法,记录下来,备查。 要用此 方法 比较我们的自定义对象,首先要有一个比较器, 要注意的是,这里的比较器是实现IEqualityComparer<T>接口的,不要写成IComparer<T>。 如下: 代码如下:    /// <summary>    /// 描    述:弹出模型对象列表比较器(根据ID比较)    /// </summary>    public class PopupComparer : IEqualityComparer<Model.PopupModel.PopupMod
c# contains C# List <T> . Contains () 方法 ( C# List <T>. Contains () Method) List <T>. Contains () method is used to check whether list contains a specified element or not. List <T> .Cont...
List 集合中检查元素是否存在有两种方式: (1). list . Contains ():确定元素是否存在于列表中 (2). list .Exists():确定列表中是否存在指定谓词的条件匹配的元素 Exists的使用 1.对 List 集合对象 list 1进行查找判断是否有元素对象的值为7 List <int> list 1 = new List <int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var result = list 1.Exists(t => t
C# 中变量可分为值类型和引用类型,值类型储存在栈中,引用类型储存在堆中,栈中储存在堆中的引用地址, List 泛型的Contais在比较值类型时,直接比较值,但是在比较引用类型时,比较的是引用地址。 问题引入 实际开发中,我们经常会把同类型的一系列对象封装到 List 集合中,当我们有需要在封装对象到 List 集合中时,排除 重复 的对象,这时直接使用if(! List . Contains (obj))
C# List 集合中,如果要查找 List 集合是否包含某一个值或者对象,如果不使用 List 集合类的扩展 方法 的话一般会使用for循环或者foreach遍历来查找,其实 List 集合类中的扩展 方法 Contain 方法 即可实现此功能,Contain 方法 的签名为bool Contains (T item),item代表具体需要判断的被包含对象。 例如有个 List <int>的集合 list 1,内部存储...
泛型 List 中有一个比较列表是否已包含对象的 方法 Contains (),今天在网上搜了一个用法,记录下来,备查。 要用此 方法 比较我们的自定义对象,首先要有一个比较器, 要注意的是,这里的比较器是实现IEqualityComparer接口的,不要写成IComparer。 /// 描 述:弹出模型对象列表比较器(根据ID比较) /// 作 者
`analyse.extract_tags` 是 jieba 中用于提取关键词的函数,它默认会保留中文字符和数字。如果你想要 筛除 数字部分,可以通过正则表达式对提取的关键词进行过滤。 具体地说,可以使用 `re.sub` 函数将数字替换为空字符串,例如: ```python import re import jieba.analyse text = "这是一段含有数字的文本,12345" tags = jieba.analyse.extract_tags(text, topK=10, withWeight=False) tags_without_num = [re.sub(r'\d+', '', tag) for tag in tags] print(tags_without_num) ['文本', '含有', '这是', '一段', '数字', 'jieba', 'analyse', '函数', '关键词', '替换'] 在上述代码中,`re.sub(r'\d+', '', tag)` 表示将 `tag` 中的所有数字替换为空字符串。这样就可以 筛除 数字部分了。