2015-12-10 2 views
0

Я пытаюсь заставить два списка работать друг с другом. Я использую Listbox1, Listbox2, List1 и List2 (для этого примера), эти два списка предназначены для дальнейших целей, поэтому их необходимо включить.C# два списка и два списка

Listbox2 должен содержать все элементы List2, listbox1 должен содержать все элементы List1, за исключением элементов в List2. Я пробовал много разных способов, но я просто не могу пройти. В настоящее время Listbox2 заполняется и обновляется отлично, но я не могу заставить Listbox1 работать соответствующим образом.

Опции я пробовал (написал бы это неправильно): - добавить все из List1 в listbox1, а затем удалить все List2 содержит - цикл по каждому элементу List1 и проверить, если он существовал в List2. Добавьте только если это не было.

Заранее благодарен!

Я знаю, что добавляю здесь парные места. Я пробовал много вещей, и удалить все, когда пытаются что-то новое (не спрашивайте почему, плохая привычка)

(AddToListbox является метод работы.)

if (classroom.members.Count <= 0) 
     { 
      foreach (Student student in repository.students) 
      { 
       AddtoListbox(Listbox1, student); 
      } 
     } 
     else 
     { 
      foreach (Student student in repository.students) 
      { 
       foreach (Student studentInClass in classroom.members) 
       { 
        if (student.LastName != studentInClass.LastName || student.FirstName != studentInClass.FirstName) 
        { 
         AddtoListbox(Listbox1, student); 
        } 
       } 
      } 
     } 
+0

Чтобы быть уверенным, Listbox2 может отображать материал в списке 2, который уже находится в списке 1, не так ли? – Annabelle

+0

List1 - это коллекция, например, 10 учеников (все учащиеся). List2 представляет собой набор студентов, которые находятся в определенном классе, например, 6/10 студентов (только учащиеся), что означает, что List2 является частью List1. Listbox1 должен показывать List1 минус List2. В этом небольшом примере List1 должен показать 4 студентов, в то время как List2 показывает остальные 6 – Kevin

+2

Можете ли вы опубликовать то, что у вас есть. Моя первоначальная мысль состояла в том, чтобы сначала заполнить Listbox2. Затем при заполнении Listbox1 используйте Foreach и пройдите через каждый элемент в List2, чтобы убедиться, что дубликатов нет. – KSdev

ответ

1

Я сделал небольшой пример, ожидающий вашего кода. У меня есть кнопка, которая заполняет два List<int>. Первый список - 1-20, второй - 5-9. Вы увидите, что он заполняет Listbox1 5-9 и Listbox2 с 1-4 и 10-20.

private void button1_Click(object sender, EventArgs e) 
{ 
    list1 = new List<int>(Enumerable.Range(5,5)); 
    list2 = new List<int>(Enumerable.Range(1,20)); 

    foreach (int num1 in list1) 
    { 
     listBox1.Items.Add(num1); 
    } 

    foreach (int num2 in list2) 
    { 
     bool numFound = false; 
     foreach (int num1 in list1) 
     { 
      if (num2 == num1) 
      { 
       numFound = true; 
       break; 
      } 
     } 
     if (!numFound) 
      listBox2.Items.Add(num2); 
    } 
} 

Не самый красноречивый код, но он выполняет свою работу.

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