Сравните два содержимого ArrayList с помощью c # - PullRequest
4 голосов
/ 10 августа 2010

У меня два архива. А именно ExistingProcess и CurrentProcess.

Массив ExistingProcess содержит список процессов, которые выполнялись при запуске этого приложения.

Архиватор CurrentProcess находится в потоке, чтобы извлекать процесс, работающий в системе все время.

Каждый раз, когда массив обработчиков currentProcess запускает текущий процесс, я хочу сравнить его с массивом ExistingProcess и показать в окне сообщения, например,

Отсутствует процесс: Блокнот [Если блокнот закрыт и приложение запущено] Новый процесс: MsPaint [если MSPaint запускается после запуска приложения]

По сути, это сравнение двух массивов, чтобы определить, что новый процесс запущен и процесс закрыт после запуска моего приложения на c #.

Надеюсь, мой вопрос понятен. Требуется помощь.

Ответы [ 2 ]

5 голосов
/ 10 августа 2010

Вы можете использовать LINQ, кроме.

За исключением того, что производит разницу в два последовательности.

Для образцов:

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());
}
3 голосов
/ 10 августа 2010

Сначала пройдите первый список и удалите каждый элемент из второго списка. Потом наоборот.

    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 );

После этого первый список будет содержать все отсутствующие процессы, а второй - все новые процессы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...