合并c#中的2个自定义List对象

本文关键字:List 对象 自定义 2个 中的 合并 | 更新日期: 2023-09-27 18:20:16

有人能帮我吗?或者能给我任何解决这个特定问题的指针吗。通过比较2个对象列表,合并列表对象。

它可以通过简单的for循环和linq进行管理,因为数据量很大,我一直在寻找最佳方式,或者任何用于此目的的算法都会有很大帮助。

class user
{
    string userID;
    string userName;
    //...
    List<role> objRoles;
}
class role
{
    List<pemission> objPermisison;
}
class pemission
{ 
    bool newlyAdded;
    //...
}
List<User> List1 :
User1      
 - Role_1
     - Permission_1 
     - Permission_2 
 - Role_2
     - Permission_3
     - Permission_4 

List<User> List2 :
User1      
 - Role_1
     - Permission_3  
     - Permission_4 
 - Role_2
     - Permission_5
     - Permission_4 

Required Result : 
List<User> Resultant_List :
User1      
 - Role_1
     - Permission_1 
     - Permission_2 
     - Permission_3 - Flag (Newly Added)
     - Permission_4 - Flag (Newly Added)
 - Role_2
     - Permission_3
     - Permission_4 
     - Permission_5  - Flag (Newly Added)

合并c#中的2个自定义List对象

根据此处合并两个没有重复的列表,字典合并是最快的方法。。。

"这个解决方案将list2转换为字典,然后在list1上循环一次。它要么添加到字典中,要么替换list2的值(如果它是重复的)。这似乎是一个更有效的算法。"

var dict = list2.ToDictionary(p => p.userID);
foreach (var person in list1)
{
    dict[person.userID] = person;
}
var merged = dict.Values.ToList();