Lambda Expressions: Finding Differences in Two Lists
Posted
Thu, Jul 2 2009 17:19
by
Deborah Kurata
One of my favorite features in .NET 3.5 is lambda expressions.
[To begin with an overview of lambda expressions, start here.]
This example demonstrates how to use lambda expressions:
- To compare items in two lists and find which items in one list are not in the other. For example: {1, 2, 3}, {2, 3, 4}. {1} is only in the first list.
- To display the contents of the resulting set.
First, define two lists:
List<int> list1 = new List<int>() { 1, 6, 8 };
List<int> list2 = new List<int>() { 2, 6 };
The following lambda expression finds all of the items that are only in the first list:
Func<IEnumerable<int>> exceptionFunction = () => list1.Except(list2);
This is a Func delegate which returns an IEnumerable<int>. There are no arguments passed into the function, hence the empty parenthesis (). The => is the lambda operator. The remaining code uses the Except method of the list to find the items not in the second list.
The following lambda expression displays the resulting items:
Action displayList =
() => exceptionFunction().ToList().ForEach(i => Debug.WriteLine(i));
This one is an Action delegate that takes no parameters. It first takes the IEnumerable result from the exceptionFunction, converts it to a list, then writes each item to the Debug window.
Call the displayList method to try this out:
displayList(); // Result 1,8
Calling displayList calls exceptionFunction which operates on the two lists. This will display 1 and 8 to the Debug window.
You can then change the list and see the new results:
list2 = new List<int>() { 1, 4 };
displayList(); // Result = 6, 8
Since the code in the lambda expressions is not executed until it is called, this call to displayList recognizes the current values of the lists. So you get new results.
You can change the other list and see the new results:
list1 = new List<int>() { 3, 4, 9 };
displayList(); // Result = 3, 9
Enjoy!