Mercurial > repos > IBBoard
view Collections/DictionaryUtils.cs @ 86:0744a1cc03cc
* Add a generic single argument method invoker delegate
no-open-ticket
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Tue, 20 Jul 2010 19:26:06 +0000 |
parents | e38192f55d2d |
children |
line wrap: on
line source
// This file (DictionaryUtils.cs) is a part of the IBBoard library and is copyright 2009 IBBoard. // // The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license. using System; using System.Collections.Generic; namespace IBBoard { public class DictionaryUtils { /// <summary> /// Takes the set of values in a dictionary and returns them as an array of typed objects. /// </summary> /// <param name="dictionary"> /// A <see cref="IDictionary"/> to extract an array of values from /// </param> /// <returns> /// An array of <see cref="VALUE_TYPE"/> objects taken from the Values property of the dictionary, or NULL if the dictionary is NULL /// </returns> public static VALUE_TYPE[] ToArray<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> dictionary) { if (dictionary == null) { return null; } int entryCount = dictionary.Count; VALUE_TYPE[] col = new VALUE_TYPE[entryCount]; if (entryCount > 0) { dictionary.Values.CopyTo(col, 0); } return col; } /// <summary> /// Takes the set of keys in a dictionary and returns them as an array of typed objects. /// </summary> /// <param name="dictionary"> /// A <see cref="IDictionary"/> to extract an array of keys from /// </param> /// <returns> /// An array of <see cref="KEY_TYPE"/> objects taken from the Keys property of the dictionary, or NULL if the dictionary is NULL /// </returns> public static KEY_TYPE[] ToKeyArray<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> dictionary) { if (dictionary == null) { return null; } int entryCount = dictionary.Count; KEY_TYPE[] col = new KEY_TYPE[entryCount]; if (entryCount > 0) { dictionary.Keys.CopyTo(col, 0); } return col; } /// <summary> /// Takes two dictionaries and merges them. If a key exists in both dictionaries then the value in <code>firstDictionary</code> takes priority. /// </summary> /// <param name="firstDictionary"> /// The <see cref="IDictionary"/> to merge values in to /// </param> /// <param name="secondDictionary"> /// The <see cref="IDictionary"/> of values to merge in /// </param> /// <returns> /// A <see cref="IDictionary"/> made by adding values from <code>secondDictionary</code> where the key didn't exist in <code>firstDictionary</code> /// </returns> public static IDictionary<KEY_TYPE, VALUE_TYPE> Merge<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> firstDictionary, IDictionary<KEY_TYPE, VALUE_TYPE> secondDictionary) { Dictionary<KEY_TYPE, VALUE_TYPE> mergedDictionary = new Dictionary<KEY_TYPE, VALUE_TYPE>(firstDictionary); foreach (KEY_TYPE key in secondDictionary.Keys) { if (!mergedDictionary.ContainsKey(key)) { mergedDictionary.Add(key, secondDictionary[key]); } } return mergedDictionary; } /// <summary> /// Convenience method to get a value from a dictionary for a given key. This method wraps a TryGetValue call in a single function. /// </summary> /// <param name="dictionary"> /// The <see cref="IDictionary"/> to get a value from /// </param> /// <param name="key"> /// The key to get the value for /// </param> /// <returns> /// The value for <code>key</code>, or <code>null</code> if there was no value for the key /// </returns> public static VALUE_TYPE GetValue<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> dictionary, KEY_TYPE key) { if (dictionary == null) { return default(VALUE_TYPE); } VALUE_TYPE val = default(VALUE_TYPE); dictionary.TryGetValue(key, out val); return val; } } }