2010-06-01 5 views

ответ

-1

Если они не отсортированы или что-то еще, вам будет трудно.

Любой алгоритм O (N^2) (простой, глупый цикл) или дополнительные структуры данных, скажите, что вы предпочитаете.

Или вы можете, конечно, изменить исходные данные путем сортировки, что, я полагаю, не является вариантом.

+1

Каким образом сортировка их как в O (N log N) не является возможностью? – Pieter

+0

Ну, вы можете упорядочить список списков O (kN) и вычислить разность O (N). – kennytm

18

Вы можете использовать IEnumerable.Except:

list1.Except(list2); 
+0

+1. Ты избил меня. – brickner

+0

не мог сделать этого, потому что аргумент Except должен быть IEnumerable. Список как аргумент неприемлем. – trnTash

+3

@trnTash: Список реализует IEnumerable . Код правильный. – dtb

0

Для простоты можно использовать Содержит метод и проверить один список не содержит элемент другого:

for (int i = 0; i < list2.Count; ++i) 
{ 
    if (!list1.Contains(list2[i]) //current element is not in list 1 
     //some code 
} 
+0

Это обратное и алгоритм O (N^2). –

+0

это могло бы сделать, но другое решение намного быстрее и меньше кода – trnTash

1

очень легко раствор:

HashSet<int> theSet1 = new HashSet<int>(List1); 
theSet1.ExceptWith(List2); 
+0

HashSet помог в конце концов. Благодаря! – trnTash

+5

Вы благодарите себя за свой собственный ответ? –

+2

Нет. Парню, который удалил свой пост. – trnTash

0

Если ваше решение, что пихта список содержит второй и вам охота ONLI записи, добавленные после первого списка, Может быть, это будет полезно

public static int DokleSuIsti(IList<string> prevzemNow, IList<string> prevzemOld) 
     { 
      int dobroja = 0; 
      int kolikohinaje; 
      if (prevzemOld.Count() < prevzemNow.Count()) 
      { 
       kolikohinaje = prevzemOld.Count(); 
      } 
      else 
      { 
       kolikohinaje = prevzemNow.Count(); 
      } 



      for (int i = 0; i < kolikohinaje; i++) 
      { 
       if (!Object.Equals(prevzemNow[i], prevzemOld[i])) 
       { 
        dobroja = i; 
        return dobroja; 
       } 
       dobroja = i; 
      } 
      return dobroja; 
     } 

После этого вы можете использовать это ИНТ в качестве отправной точки для ходьбы через ваш Ilist

Смежные вопросы