C# LINQ List Element Comparison
Suppose you have two lists, one old and one new, and you are looking to compare the differences between them. Simply checking the length is not enough, since there could be an equal number of adds and removes.
LINQ's IEnumerable extension Except can provide the differences between the two lists.
// create two sample lists
List<int> old_list = new List<int>() { 1, 2, 3, 4 };
List<int> new_list = new List<int>() { 2, 3, 4, 5 };
// generate their MD5 hashes
string old_hash = createHash(old_list); // "81dc9bdb52d04dc20036dbd8313ed055"
string new_hash = createHash(new_list); // "81b073de9370ea873f548e31b8adc081"
// compare the hashes
if (old_hash != new_hash)
{
// determine what has changed
List<int> removed = old_list.Except(new_list).ToList(); // 1
List<int> added = new_list.Except(old_list).ToList(); // 5
}
The createHash function must order the lists, in some fashion, to ensure that the hash is repeatable when the same data is provided to it.
public static string createHash(List<int> list)
{
// verify what we have here
if (list != null && list.Count > 0)
{
// order the partners and build a hash
list = list.OrderBy(x => x).ToList();
// iterate and build string list
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.Count; i++)
sb.Append(list[i]);
// return hash of the data
return Echovoice.MD5.Hash.makeHash(sb.ToString());
}
return string.Empty;
}
Written by Teddy Garland
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#