代码如下:
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重复的内容,不区分大小写,请教高效的方法。
我也来一种方法:
先定义一个类继承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();
这里提供一种方法:
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);
}
最终输出第一个,第四个
喜欢第二种,很实用
个人比较喜欢第二个方法!
第二个方法更简单明了!
用linq 中from的方法,好像可以直接有distinct过滤掉得。