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` 中的所有数字替换为空字符串。这样就可以
筛除
数字部分了。