使用c#比较两个ArrayList内容

时间:2010-08-10 03:23:39

标签: c# comparison arraylist

我有两个arraylist。即ExistingProcess和CurrentProcess。

ExistingProcess arraylist包含此应用程序启动时运行的进程列表。

CurrentProcess arraylist位于一个线程中,用于一直获取系统中运行的进程。

每当currentProcess arraylist让当前进程运行时,我想与ExistingProcess arraylist进行比较,并在消息框中显示,如

缺少进程:NotePad [如果记事本已关闭且应用程序已启动] 新流程:MsPaint [如果MSPaint在应用程序启动后启动]

基本上这是两个arraylist的比较,以找出启动c#应用程序后启动和处理关闭的新流程。

希望我的问题很明确。需要帮助。

2 个答案:

答案 0 :(得分:5)

您可以使用LINQ Except。

  

除了产生两者的设定差异   序列。

样品:

http://msdn.microsoft.com/en-us/library/bb300779.aspx

http://msdn.microsoft.com/en-us/library/bb397894%28VS.90%29.aspx

代码来说明这个想法......

static void Main(string[] args)
{
    ArrayList existingProcesses = new ArrayList();

    existingProcesses.Add("SuperUser.exe");
    existingProcesses.Add("ServerFault.exe");
    existingProcesses.Add("StackApps.exe");
    existingProcesses.Add("StackOverflow.exe");

    ArrayList currentProcesses = new ArrayList();

    currentProcesses.Add("Games.exe");
    currentProcesses.Add("ServerFault.exe");
    currentProcesses.Add("StackApps.exe");
    currentProcesses.Add("StackOverflow.exe");

    // Here only SuperUser.exe is the difference... it was closed.   
    var closedProcesses = existingProcesses.ToArray().
                          Except(currentProcesses.ToArray());

    // Here only Games.exe is the difference... it's a new process.   
    var newProcesses = currentProcesses.ToArray().
                       Except(existingProcesses.ToArray());
}

答案 1 :(得分:3)

首先,浏览第一个列表并从第二个列表中删除每个项目。反之亦然。

    var copyOfExisting = new ArrayList( ExistingProcess );
    var copyOfCurrent = new ArrayList( CurrentProcess );

    foreach( var p in ExistingProcess ) copyOfCurrent.Remove( p );
    foreach( var p in CurrentProcess ) copyOfExisting.Remove( p );

之后,第一个列表将包含所有缺少的进程,第二个列表将包含所有新进程。