问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

去除list集合中重复项的几种方法

发布网友 发布时间:2022-06-09 17:41

我来回答

1个回答

热心网友 时间:2024-11-16 00:22

因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。

测试数据:

       List<string> li1 = new List<string> { "8", "8", "9", "9" ,"0","9"};
List<string> li2 = new List<string> { "张三", "张三", "李四", "张三", "王五", "李四" };
List<string> li3 = new List<string> { "A", "A", "C", "A", "C", "D" };
List<string> li4 = new List<string> { "12", "18", "19", "19", "10", "19" };
方法一:

HashSet<string> hs = new HashSet<string>(li1); //此时已经去掉重复的数据保存在hashset中

方法二:

for (int i = 0; i < li2.Count; i++) //外循环是循环的次数
{
for (int j = li2.Count - 1 ; j > i; j--) //内循环是 外循环一次比较的次数
{

if (li2[i] == li2[j])
{
li2.RemoveAt(j);
}

}
}

方法三:

      //把相同的用null代替。
for (int i = 0; i < li3.Count; i++)
{
for (int j = 0; j < li3.Count; j++)
{
if (i == j) continue;

if (li3[i] == li3[j])
{
li3[j] = "null";
}

}
}

方法四:

     //这方法跟上面的一样,只是变了逻辑
for (int i = 0; i < li4.Count - 1; i++)
{
for (int j = 0; j < li4.Count ; j++)
{
if (i != j)
{
if (li4[i] == li4[j])
{
li4[j] = "null";
}
}
}
}

最后输出看结果

       Console.WriteLine("li1去除重复后的值为");
hs.ToList().ForEach(item => Console.WriteLine(item));

Console.WriteLine("li2去除重复后的值为");
li2.ForEach(item => Console.WriteLine(item));

Console.WriteLine("li3去除重复后的值为");
li3.ForEach(item => Console.WriteLine(item));

Console.WriteLine("li4去除重复后的值为");
li4.ForEach(item => Console.WriteLine(item));

null我没去掉。用的时候去掉即可。

当然。还有许多办法。比如linq Distinct 等等都可以,看看网上的这个例子:去掉modelList中title重复的内容,不区分大小写

class Program
{
static void Main(string[] args)
{
List<Model> modelList = new List<Model>()
{ new Model() { ID = 1, Title = "abcde" },
new Model() { ID = 2, Title = "ABCDE" },
new Model(){ ID = 3, Title = "AbcdE" },
new Model() { ID = 4, Title = "A" },
new Model() { ID = 5, Title = "a" }
};
Console.Read();
}
}
public class Model
{
public int ID { get; set; }
public string Title { get; set; }
}

解决方案一:这里比较的前提是对象的哈希代码相等。否则不会比较,因为哈希代码不相等。两个对象显然不相等

//定义一个类继承IEqualityComparer接口
public class ModelComparer : IEqualityComparer<Model>
{
public bool Equals(Model x, Model y)
{
return x.Title.ToUpper() == y.Title.ToUpper();
}
public int GetHashCode(Model obj)
{
return obj.Title.ToUpper().GetHashCode();
}
}

调用:

modelList = modelList.Distinct(new ModelComparer()).ToList();

解决方案二:

var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.FirstOrDefault().ID });
modelList = modelList.Where(m => title.Select(mo => mo.ID).Contains(m.ID)).ToList();
foreach (var item in modelList)
{
Console.WriteLine(item.ID + "\t" + item.Title);
}

当然。如果你仅仅比较两个值是否相等。

List<string> li1 = new List<string> { "8", "8", "9", "8", "0", "9" };
li1 = li1.Distinct().ToList();
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑docx怎么转换成word文档电脑上docx格式文件转换方法 电脑白屏是怎么回事啊。??? 电脑开机花屏渐渐地白屏了显示器突然白屏花屏的原因及解决方法_百度知 ... iphone录屏失败因为5823什么意思_iphone录屏失败提示5823代表什么意思... 软考中级:信息安全工程师 求大神解答打印机如何设置默认双面打印 如何更改打印机的打印格式? 经期同房月经没了会怀孕吗 iphone8p轻触解锁设置 宝沃bx5300公里多少油钱 怎么去除list中的重复项 基金涨,中风险理财也会涨么 期货龙虎榜多空比如何解读 Adobe Photoshop CS2下载好了怎么安装 Adobe Photoshop cs2安装教程 adobe photoshopCS2 最后怎么安装 Adobe Photoshop CS2如何安装 看到中软国际,是做IT的吗?怎么样啊? 中软国际对日软件外包怎么样?待遇不咋的,解决北京户口;还有别的公司... 中软国际在业务流程外包方面怎么样? 中软,服务外包 学软件的,做外包前景如何?中软外包给华为的,里面情况如何,待遇好不好... 中软国际人力外包项目有保障吗? 波美度42什么意思 为什么很多蜂蜜产品的浓度不标注?为什么国家标准要求蜂蜜浓度至少要达到... 40℃和42℃的蜜有什么区别 赛克电动车充电器冒烟还能用吗? 刚买回来的小蝌蚪吃什么东西 男人精液小蝌蚪很少还不活跃怎么办 男性备孕期间吃什么补精,男性备孕指南 如何快速在两个List中去掉重复数据 C#中 list 去除重复的数据 求最简单的方法!! 如何删除list里面的重复字段 有什么做水果拼盘的书籍推荐呢? 那种卫生间智能净味机好?朋友说用鲸叹号 职高生是不是中学生? 职高毕业的学生属于高中生还是初中生?就是中职生属于高中生吗? 什么学历可以读职高? 初中毕业上高中好,还是读职高好? 顺丰同城电动车和摩托车接单区别 对不起,您暂时无法使用此银行卡进行支付是什么意思? ...的银行卡冻结了,也可去银行取现呢?就是不可以支付,这是怎么回事_百 ... 银行卡下架不能用怎么回事 上海浦东新区到台前县的顺风车怎么找想找浦东新区到台前县的群或... 交银全明星定投可以随时取出吗? 海尔xqb50-7288里面那个塑料过滤网怎么安装 樱花洗衣机集尘盒怎么装 79岁老人车祸死亡赔偿 南安五台山是什么朝代的 感天大帝灵签阳阳阳是第几签