C# program to find additional values in two lists

Finding additional values between two lists is a common requirement in C# programming. This involves identifying elements that exist in one list but not in another. The Except() method from LINQ provides an efficient way to find the difference between two collections.

Syntax

The Except() method returns elements from the first sequence that are not present in the second sequence −

IEnumerable<T> result = list1.Except(list2);

To find differences in both directions, you can use −

var onlyInList1 = list1.Except(list2);
var onlyInList2 = list2.Except(list1);

Using Except() to Find Additional Values

The Except() method returns elements from the first list that are not present in the second list −

using System;
using System.Collections.Generic;
using System.Linq;

public class Demo {
   public static void Main() {
      List<string> list1 = new List<string> {
         "P", "Q", "R", "S", "T", "U", "V", "W"
      };
      
      List<string> list2 = new List<string> {
         "T", "U", "V", "W"
      };
      
      Console.WriteLine("First list: " + string.Join(", ", list1));
      Console.WriteLine("Second list: " + string.Join(", ", list2));
      
      IEnumerable<string> additionalInList1 = list1.Except(list2);
      Console.WriteLine("Additional values in first list: " + 
                       string.Join(", ", additionalInList1));
   }
}

The output of the above code is −

First list: P, Q, R, S, T, U, V, W
Second list: T, U, V, W
Additional values in first list: P, Q, R, S

Finding Additional Values in Both Directions

To find elements that are unique to each list, apply Except() in both directions −

using System;
using System.Collections.Generic;
using System.Linq;

public class Program {
   public static void Main() {
      List<int> numbers1 = new List<int> { 1, 2, 3, 4, 5 };
      List<int> numbers2 = new List<int> { 3, 4, 5, 6, 7 };
      
      var onlyInFirst = numbers1.Except(numbers2);
      var onlyInSecond = numbers2.Except(numbers1);
      
      Console.WriteLine("Numbers only in first list: " + 
                       string.Join(", ", onlyInFirst));
      Console.WriteLine("Numbers only in second list: " + 
                       string.Join(", ", onlyInSecond));
      Console.WriteLine("All unique numbers: " + 
                       string.Join(", ", onlyInFirst.Concat(onlyInSecond)));
   }
}

The output of the above code is −

Numbers only in first list: 1, 2
Numbers only in second list: 6, 7
All unique numbers: 1, 2, 6, 7

Using HashSet for Better Performance

For larger datasets, using HashSet provides better performance for set operations −

using System;
using System.Collections.Generic;

public class SetDemo {
   public static void Main() {
      HashSet<string> set1 = new HashSet<string> { "A", "B", "C", "D" };
      HashSet<string> set2 = new HashSet<string> { "C", "D", "E", "F" };
      
      HashSet<string> onlyInSet1 = new HashSet<string>(set1);
      onlyInSet1.ExceptWith(set2);
      
      HashSet<string> onlyInSet2 = new HashSet<string>(set2);
      onlyInSet2.ExceptWith(set1);
      
      Console.WriteLine("Only in set1: " + string.Join(", ", onlyInSet1));
      Console.WriteLine("Only in set2: " + string.Join(", ", onlyInSet2));
   }
}

The output of the above code is −

Only in set1: A, B
Only in set2: E, F

Comparison of Methods

Method Best For Time Complexity
LINQ Except() Small to medium lists O(n + m)
HashSet ExceptWith() Large datasets O(n)
Manual foreach loop Custom comparison logic O(n * m)

Conclusion

The Except() method provides an efficient way to find additional values in lists by returning elements from the first collection that are not present in the second. For better performance with large datasets, consider using HashSet operations instead.

Updated on: 2026-03-17T07:04:35+05:30

398 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements