最近在做项目的时候,发现有些需求需要特别的方式来实现。下面看代码
private List<string> firstType = new List<string>(); private List<string> secondeType = new List<string>(); private Dictionary<string, List<string>> typeKeyValue = new Dictionary<string, List<string>>(); // 一个键对应一个的得集合 array = JArray.Parse(jsonType); for (int i = 0; i < array.Count; i++) { //type.Add(item.ToString()); string firstTypeStr = array[i].ToString().Split(',')[0]; if (!firstType.Contains(firstTypeStr)) //剔除重复数据 { firstType.Add(firstTypeStr); } } foreach (var item in firstType) { secondeType = new List<string>(); //中分类 foreach (var type in array) { if (item == type.ToString().Split(',')[0]) { secondeType.Add(type.ToString().Split(',')[1]); } } typeKeyValue.Add(item, secondeType); }
下面是去除现有集合中重复数据的方法
List<User> users = new List<User>(); users.Add(new User("张三","北京东路")); users.Add(new User("李四","高新大道")); users.Add(new User("王五", "中山街")); users.Add(new User("张三", "北京东路")); users.Add(new User("李四", "高新大道")); users.Add(new User("王五", "中山大道")); //Distinct去出集合中的重复数据 List<User> usersList1 = users.Distinct<User>().ToList(); //Lambda表达式去重 List<User> userList2 = users.Where((x,y)=>users.FindIndex(z=>z.Name==x.Name)==y).ToList(); //通过循环的方式去重 List<User> userList3 = new List<User>(); foreach (var item in users) { if (userList3.Exists(z=>z.Name==item.Name)==false) { userList3.Add(item); } } foreach (List<User> item in new object[] { usersList1,userList2,userList3}) { Console.Write("UserList:\r\n"); foreach (var user in item) { Console.WriteLine(user.ToString()); } } Console.ReadKey(); } class User : IEquatable<User> { public string Name { set; get; } private string Address { get; set; } public User(string name,string address) { this.Name = name; this.Address = address; } public override string ToString() { return string.Format("name:{0},\taddress{1}", Name, Address); } public bool Equals(User other) { return this.Name==other.Name; } public override int GetHashCode() { return Name.GetHashCode(); } }
在User类中,Equals函数中比较的参数,就是你要通过比较那个参数来去除重复的数据
在上面的示例中如果Name的值相同,Address的值不同,打印出来的是三个数据
而Name不同,Address相同,打印出来的是4条数据