急!!!!!在线等!C# List!!!!!!!!!!!!!!!!!

zdw_asp 2011-02-12 12:49:43
现有个User 对象,里面有 IDa,IDb,IDc,IDd,name;通过IDa,IDb,IDc,IDd,四个ID,判断是同一个user;
List<User> list = new List<User>();
User user = new User();
list里面有N条数据,过滤重复的user,就是说把list里面 IDa,IDb,IDc,IDd,相同的 user过滤掉,只保留一个;使list中没有重复的user
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
billsquall 2011-02-12
  • 打赏
  • 举报
回复
where a.IIDa == list[i].IIDa && a.IIDb == list[i].IIDb && a.IIDc == list[i].IIDc && a.IIDd == list[i].IIDd select a;

你这个是所有id都相同的取出来不要了?

或者你循环的时候把这些ID都串在一起,放hashtable里也不错啊,直接判断key

key=IDa+","+IDb+","+IDc+","+IDd
value=user
yalan 2011-02-12
  • 打赏
  • 举报
回复
我也赞同3楼,这样应该可以
claymore1114 2011-02-12
  • 打赏
  • 举报
回复
直接分组,取 每一组的一条

List<User> list = new List<User>();
var query = list.GroupBy(g => new { g.IDa,g.IDb,g.IDc,g.IDd }).Select(s=>s.FirstOrDefault());
机器人 2011-02-12
  • 打赏
  • 举报
回复
用Linq就简单很多了:
方法1: group by
方法2: Distinct


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqDistinctTest
{
class Program
{
static void Main(string[] args)
{
var query1 = from a in GetData()
group a by new { a.A } into g
select g.FirstOrDefault();

foreach (var u in query1)
Console.WriteLine(u.ToString());

Console.WriteLine("=============");

var compare = new UserCompare();
var query2 = GetData().Distinct(compare);

foreach (var u in query2)
Console.WriteLine(u.ToString());

Console.WriteLine("=============");

Console.Read();
}

static List<User> GetData()
{
return new List<User> {
new User { A = "a1", B = "b1", C = "c1", D = "d1" },
new User { A = "a1", B = "b1", C = "c1", D = "d1" },
new User { A = "a2", B = "b1", C = "c1", D = "d1" },
new User { A = "a1", B = "b2", C = "c1", D = "d1" },
new User { A = "a1", B = "b1", C = "c1", D = "d1" },
new User { A = "a1", B = "b1", C = "c2", D = "d1" },
new User { A = "a1", B = "b1", C = "c1", D = "d2" },
};
}
}

class UserCompare : IEqualityComparer<User>
{
#region IEqualityComparer<User> Members

public bool Equals(User x, User y)
{
return (x.A == y.A && x.B == y.B && x.C == y.C && x.D == y.D);
}

public int GetHashCode(User obj)
{
return obj.ToString().ToLower().GetHashCode();
}

#endregion
}

class User
{
public string A;
public string B;
public string C;
public string D;

public override string ToString()
{
return string.Format("{0},{1},{2},{3}", A, B, C, D);
}
}
}

bdmh 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zdw_asp 的回复:]
C# code

User user1 = new User() { IIDa = 1, IIDb = 1, IIDc = 1, IIDd = 1, Name = "a", Value = 3 };
User user2 = new User() { IIDa = 2, IIDb = 2, IIDc = 2, IIDd = 2, Name = "b", Value……
[/Quote]
应该可以
zdw_asp 2011-02-12
  • 打赏
  • 举报
回复

User user1 = new User() { IIDa = 1, IIDb = 1, IIDc = 1, IIDd = 1, Name = "a", Value = 3 };
User user2 = new User() { IIDa = 2, IIDb = 2, IIDc = 2, IIDd = 2, Name = "b", Value = 3 };
User user3 = new User() { IIDa = 1, IIDb = 1, IIDc = 1, IIDd = 1, Name = "a", Value = 3 };
User user4 = new User() { IIDa = 1, IIDb = 1, IIDc = 1, IIDd = 1, Name = "s", Value = 3 };
User user5 = new User() { IIDa = 2, IIDb = 2, IIDc = 2, IIDd = 2, Name = "d", Value = 3 };
User user6 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "c", Value = 3 };
User user7 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "e", Value = 3 };
User user8 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "f", Value = 3 };
User user9 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "g", Value = 3 };
List<User> list = new List<User>();
list.Add(user1);
list.Add(user2);
list.Add(user3);
list.Add(user4);
list.Add(user5);
list.Add(user6);
list.Add(user7);
list.Add(user8);
list.Add(user9);
List<User> list1 = new List<User>();
for (int i = 0; i < list.Count; i++)
{
if (list1.Count != 0)
{
var n = from a in list1 where a.IIDa == list[i].IIDa && a.IIDb == list[i].IIDb && a.IIDc == list[i].IIDc && a.IIDd == list[i].IIDd select a;
if (n.ToList().Count == 0)
{
list1.Add(list[i]);
}
}
else
{
list1.Add(list[i]);
}
}

这样逻辑有没有问题?
枪牌 2011-02-12
  • 打赏
  • 举报
回复
方法1:在每一个list.Add前判断list中是否已存在user,如果存在,则不Add
方法2:重载list的Add方法,在Add方法中判断list中是否已存在user,如果存在,则不Add
方法3:为User实现ICompare接口,这样在方法2中的代码看起来就好多了
guoyanhong1111 2011-02-12
  • 打赏
  • 举报
回复
1.在循环外定义一个list.
2.遍历个循环,判断user对象是否相同,如果不同则放入一个定义好的list中,如果相同这不添加到list

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧