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

http://www.cnblogs.com/fengri/archive/2013/10/10/3361174.html

?

因为用到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();

?
?

?
?

时间: 2024-10-11 06:32:34

去除list集合中重复项的几种方法的相关文章

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

因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List<string> li1 = new List<string> { "8", "8", "9", "9" ,"0","9"}; List<string> li2 = new List<string> { "张三", "张三&q

去除ArrayList集合中重复字符串元素方式_思路:创建新集合方式

import java.util.ArrayList; import java.util.Iterator; public class jh_01_去除ArrayList集合中重复字符串元素方式 { /* * /** * * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 */ public static void main(String[] args) { ArrayList list = new ArrayList(); li

关于iOS去除数组中重复数据的几种方法

关于iOS去除数组中重复数据的几种方法 在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的.代码: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-

C#中去除List&lt;T&gt;中重复项的问题/LINQ Distinct重复项

List<T>是.NET中最常用的一种数据结构了,我们常常把需要操作的对象都放到一个List<T>里面.有的时候,我们需要让List<T>中的数据保持唯一性,也就是说List中的数据不能有重复的项.我们知道,List<T>中可以存放任意的类型,如List<int>,List<string>等.为了剔除List<T>中的重复项,.NET为我们提供了一个Distinct()函数.对于普通类型的List,我们可以直接调用该函数剔

Js中去除数组中重复元素的4种方法

今天工作遇到此问题,尝试多个方法不尽人意,故此写个博客来总结一下如何在js中去除重复元素. 方法1:         Array.prototype.method1 = function(){             var arr[];    //定义一个临时数组             for(var i = 0; i < this.length; i++){    //循环遍历当前数组                 //判断当前数组下标为i的元素是否已经保存到临时数组          

Js中去除数组中重复元素的几种方法

方法1: 1 Array.prototype.method1=function(){ 2 var arr=[]; 3 for(var i=0;i<this.length;i++){ 4 if(arr.indexOf(this[i]) == -1){ 5 arr.push(this[i]); 6 } 7 } 8 return arr; 9 } 方法2: 1 Array.prototype.method2 = function(){ 2 var h{}; //定义一个hash表 3 var arr[

去除List列表中重复值(稍作调整,也适合于List&lt;T&gt; 和 List&lt;?&gt;)

方法一 循环元素删除 [c-sharp] view plaincopy public static void removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j > i; j -- ) { if (list.get(j).equals(list.get(i))) { list.remove(j); } } } System.

Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素

1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5)拿着个元素到新集合中去找,看有没有   有:不搭理它 没有:添加到新集合      (6)遍历新集合 2. 案例代码: 1 package cn.itcast_04; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6

去除List集合中的重复元素? 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型,自定义类型)?

 关键字: 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型)?  *   *     思考: List就可以存储重复元素,那么需求中容器中的元素必须保证唯一性,该如何解决呢??  *      *   去除List集合中的重复元素?  * * 思路: * * 1.首先我需要另一个临时容器tempList,用来存放我认为应该保留的元素.(也就是不重复的元素) * 2.然后我们应该遍历原容器, 一个一个的取出元素, 放入tempList. * 当tempList里已经装有刚刚取出的