首页 新闻 会员 周边

如何去掉List中的重复内容

1
悬赏园豆:5 [已解决问题] 解决于 2011-11-16 13:26

代码如下:

    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; }
}

现在要去掉modelList中title重复的内容,不区分大小写,请教高效的方法。

乱世文章的主页 乱世文章 | 初学一级 | 园豆:147
提问于:2011-11-15 15:08
< >
分享
最佳答案
1

我也来一种方法:

先定义一个类继承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();
收获园豆:3
LCM | 大侠五级 |园豆:6876 | 2011-11-15 16:20
其他回答(4)
1

这里提供一种方法:

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"}
};

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);
}

最终输出第一个,第四个

收获园豆:2
artwl | 园豆:16736 (专家六级) | 2011-11-15 15:23

喜欢第二种,很实用

支持(0) 反对(0) 编程熊猫 | 园豆:200 (初学一级) | 2017-03-16 10:24
0

个人比较喜欢第二个方法!

C#菜子 | 园豆:215 (菜鸟二级) | 2011-11-15 16:24
0

第二个方法更简单明了!

喬喬AI | 园豆:996 (小虾三级) | 2011-11-15 18:12
0

用linq 中from的方法,好像可以直接有distinct过滤掉得。

悟行 | 园豆:12559 (专家六级) | 2011-11-16 09:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册