Mercurial > repos > IBBoard
annotate 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 |
rev | line source |
---|---|
16 | 1 // This file (DictionaryUtils.cs) is a part of the IBBoard library and is copyright 2009 IBBoard. |
11
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 // |
16 | 3 // 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. |
11
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 |
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 using System; |
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
6 using System.Collections.Generic; |
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 |
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 namespace IBBoard |
14
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
9 { |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
10 public class DictionaryUtils |
11
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
11 { |
12
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
12 /// <summary> |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
13 /// Takes the set of values in a dictionary and returns them as an array of typed objects. |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
14 /// </summary> |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
15 /// <param name="dictionary"> |
14
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
16 /// A <see cref="IDictionary"/> to extract an array of values from |
12
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
17 /// </param> |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
18 /// <returns> |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
19 /// An array of <see cref="VALUE_TYPE"/> objects taken from the Values property of the dictionary, or NULL if the dictionary is NULL |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
20 /// </returns> |
15
043a1d8101f2
* Rename "Convert" method to "ToArray" now that the class is more generic
IBBoard <dev@ibboard.co.uk>
parents:
14
diff
changeset
|
21 public static VALUE_TYPE[] ToArray<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> dictionary) |
11
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
22 { |
12
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
23 if (dictionary == null) |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
24 { |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
25 return null; |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
26 } |
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
27 |
13
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
28 int entryCount = dictionary.Count; |
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
29 VALUE_TYPE[] col = new VALUE_TYPE[entryCount]; |
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
30 |
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
31 if (entryCount > 0) |
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
32 { |
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
33 dictionary.Values.CopyTo(col, 0); |
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
34 } |
6b762694f051
Check size of dictionary so that we don't have to get the values when we've got an empty dictionary
IBBoard <dev@ibboard.co.uk>
parents:
12
diff
changeset
|
35 |
12
465b672e9682
Closes #5 - Dictionary to array converter
IBBoard <dev@ibboard.co.uk>
parents:
11
diff
changeset
|
36 return col; |
11
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 } |
28
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
38 |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
39 /// <summary> |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
40 /// Takes the set of keys in a dictionary and returns them as an array of typed objects. |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
41 /// </summary> |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
42 /// <param name="dictionary"> |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
43 /// A <see cref="IDictionary"/> to extract an array of keys from |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
44 /// </param> |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
45 /// <returns> |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
46 /// An array of <see cref="KEY_TYPE"/> objects taken from the Keys property of the dictionary, or NULL if the dictionary is NULL |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
47 /// </returns> |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
48 public static KEY_TYPE[] ToKeyArray<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> dictionary) |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
49 { |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
50 if (dictionary == null) |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
51 { |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
52 return null; |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
53 } |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
54 |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
55 int entryCount = dictionary.Count; |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
56 KEY_TYPE[] col = new KEY_TYPE[entryCount]; |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
57 |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
58 if (entryCount > 0) |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
59 { |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
60 dictionary.Keys.CopyTo(col, 0); |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
61 } |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
62 |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
63 return col; |
41ddcd61dc92
Add method to get array of keys from dictionary
IBBoard <dev@ibboard.co.uk>
parents:
16
diff
changeset
|
64 } |
14
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
65 |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
66 /// <summary> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
67 /// Takes two dictionaries and merges them. If a key exists in both dictionaries then the value in <code>firstDictionary</code> takes priority. |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
68 /// </summary> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
69 /// <param name="firstDictionary"> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
70 /// The <see cref="IDictionary"/> to merge values in to |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
71 /// </param> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
72 /// <param name="secondDictionary"> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
73 /// The <see cref="IDictionary"/> of values to merge in |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
74 /// </param> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
75 /// <returns> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
76 /// A <see cref="IDictionary"/> made by adding values from <code>secondDictionary</code> where the key didn't exist in <code>firstDictionary</code> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
77 /// </returns> |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
78 public static IDictionary<KEY_TYPE, VALUE_TYPE> Merge<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> firstDictionary, IDictionary<KEY_TYPE, VALUE_TYPE> secondDictionary) |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
79 { |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
80 Dictionary<KEY_TYPE, VALUE_TYPE> mergedDictionary = new Dictionary<KEY_TYPE, VALUE_TYPE>(firstDictionary); |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
81 |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
82 foreach (KEY_TYPE key in secondDictionary.Keys) |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
83 { |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
84 if (!mergedDictionary.ContainsKey(key)) |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
85 { |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
86 mergedDictionary.Add(key, secondDictionary[key]); |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
87 } |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
88 } |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
89 |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
90 return mergedDictionary; |
25b953087465
* Rename DictionaryToArrayConverter to DictionaryUtils
IBBoard <dev@ibboard.co.uk>
parents:
13
diff
changeset
|
91 } |
29
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
92 |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
93 /// <summary> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
94 /// Convenience method to get a value from a dictionary for a given key. This method wraps a TryGetValue call in a single function. |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
95 /// </summary> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
96 /// <param name="dictionary"> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
97 /// The <see cref="IDictionary"/> to get a value from |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
98 /// </param> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
99 /// <param name="key"> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
100 /// The key to get the value for |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
101 /// </param> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
102 /// <returns> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
103 /// The value for <code>key</code>, or <code>null</code> if there was no value for the key |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
104 /// </returns> |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
105 public static VALUE_TYPE GetValue<KEY_TYPE, VALUE_TYPE>(IDictionary<KEY_TYPE, VALUE_TYPE> dictionary, KEY_TYPE key) |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
106 { |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
107 if (dictionary == null) |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
108 { |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
109 return default(VALUE_TYPE); |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
110 } |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
111 |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
112 VALUE_TYPE val = default(VALUE_TYPE); |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
113 dictionary.TryGetValue(key, out val); |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
114 return val; |
e38192f55d2d
* Add convenience method to get a value from a dictionary in a single line
IBBoard <dev@ibboard.co.uk>
parents:
28
diff
changeset
|
115 } |
11
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
116 } |
ba9239164de2
Fixes #5 - Converting dictionary to array
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
117 } |