标签:financial markets c# 数据 金融
创建AssocArray的目的是关联数据和主键:例如"A1" ~ 1; "B1" ~ 2.08 ...
其中,Set是自定义的数据结构,内部含有dictionary数据,可以进行诸如合并,交集等的操作。
using System; using System.Collections.Generic; using System.Collections; using System.Linq; using System.Text; namespace FinMktReverseEngineering { //1. Set #region Set 类型 public class Set<T> : IEnumerable<T> { // 成员 protected Dictionary<T, int> dict; //构造器1 public Set() { dict = new Dictionary<T, int>(); } //构造器2 public Set(Set<T> set) { dict = new Dictionary<T, int>(); foreach (T key in set.dict.Keys) { dict[key]=0; } } //GetEnumerator迭代器 IEnumerator<T> IEnumerable<T>.GetEnumerator() { foreach (KeyValuePair<T, int> item in dict) { yield return item.Key; } } // 【修改】 IEnumerator IEnumerable.GetEnumerator() { foreach (KeyValuePair<T, int> item in dict) { yield return item.Key; } } //Insert方法 public void Insert(T key) { dict[key]=0; } //Remove方法 public void Remove(T key) { dict.Remove(key); } //Contains方法 public bool Contains(T key) { if (dict.ContainsKey(key)) { return true; } else return false; } //Replace方法 public void Replace(T key1,T key2) { foreach (T key in dict.Keys) { if (key.Equals(key1)) { Remove(key1); Insert(key2); break; } } } //Intersection方法 public static Set<T> Intersection(Set<T> s1, Set<T> s2) { Set<T> setIntsec = new Set<T>(); foreach (T key1 in s1.dict.Keys) { foreach (T key2 in s2.dict.Keys) { if (key1.Equals(key2)) setIntsec.Insert(key1); } } return setIntsec; } //Union方法 public static Set<T> Union(Set<T> s1, Set<T> s2) { Set<T> setUnion = new Set<T>(s1); foreach (T key2 in s2.dict.Keys) { setUnion.Insert(key2); } return setUnion; } //Difference方法 public static Set<T> Difference(Set<T> s1, Set<T> s2) { Set<T> setDiff = new Set<T>(s1); foreach (T key1 in s1.dict.Keys) { foreach (T key2 in s2.dict.Keys) { if (key1.Equals(key2)) setDiff.Remove(key1); } } return setDiff; } //SymmetricDifference方法 public static Set<T> SymmetricDifference(Set<T> s1, Set<T> s2) { Set<T> setSymDiff = Set<T>.Union(s1,s2); foreach (T key1 in s1.dict.Keys) { foreach (T key2 in s2.dict.Keys) { if (key1.Equals(key2)) setSymDiff.Remove(key1); } } return setSymDiff; } //print()方法 public void print() { foreach (KeyValuePair<T,int> item in dict) { Console.Write("{0}, ", item.Key); } Console.WriteLine(); } //Size()方法 public int Size() { return dict.Count; } //count属性 public int count { get { return dict.Count; } } //是否是空集 public bool IsEmpty { get { return dict.Count==0?true:false; } } //两个集合是否相同 public bool IsEqual(Set<T> newSet) { if (this.dict.Count!=newSet.count) { return false; } else { foreach (T key in newSet) { if (!this.dict.ContainsKey(key)) { return false; } } return true; } } } #endregion //2. AssocArray #region AssocArray 类型 public class AssocArray<Key, Value> : IEnumerable<KeyValuePair<Key, Value>> { //成员 Dictionary<Key, Value> str; //这个字典的主键数量可能比Set中的要大。 Set<Key> keys; // 构造器1:Default constructor public AssocArray() { str = new Dictionary<Key, Value>(); keys = new Set<Key>(); } // 构造器2:Copy constructor public AssocArray(AssocArray<Key, Value> arr2) { str = new Dictionary<Key, Value>(arr2.str); // Dictionary的copy构造器 keys = new Set<Key>(arr2.keys); } // 构造器3:初始化关键字和值 public AssocArray(Set<Key> keys, Value val) { this.keys = keys; str = new Dictionary<Key, Value>(); foreach (Key k in this.keys) { str[k] = val; } } // 构造器4 public AssocArray(Set<Key> keys, Dictionary<Key, Value> str) { this.keys = keys; this.str = str; } //this索引 public Value this[Key k] // k in Set keys { set { keys.Insert(k); str[k] = value; //str Dictionary } get { return str[k]; } } //Keys Set 属性 public Set<Key> Keys { set { this.keys = value; } get { return keys; } } //Dictionary public Dictionary<Key,Value> Dict { set { this.str = value; } get { return this.str; } } //在console中打印 public void print() { foreach (Key key in keys) { if (str.ContainsKey(key)) { Console.Write("{0}, {1} ", key, str[key]); } } Console.WriteLine(); } // 返回Dictionary和Set中都有的主键对应的keyvaluepair IEnumerator<KeyValuePair<Key, Value>> IEnumerable<KeyValuePair<Key, Value>>.GetEnumerator() { for (int i = 0; i < this.keys.count; i++) { yield return this.str.ElementAt(i); } } IEnumerator IEnumerable.GetEnumerator() { for (int i = 0; i < this.keys.count; i++) { yield return this.str.ElementAt(i); } } } #endregion }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Globalization; namespace FinMktReverseEngineering { class test { static void Main(string[] args) { Set<string> set1 = new Set<string>(); Dictionary<string, double> dict = new Dictionary<string, double>(); set1.Insert("A1"); set1.Insert("A2"); set1.Insert("A3"); set1.Insert("A7"); dict.Add("A1", 1); dict.Add("A2", 2); dict.Add("A3", 3); dict.Add("A4", 4); dict.Add("A5", 5); dict.Add("A6", 6); AssocArray<string, double> arr = new AssocArray<string, double>(set1, dict); arr["B1"] = 7; arr.print(); Console.Read(); } } }
【C#】19. Set、Dictionary创建AssocArray
标签:financial markets c# 数据 金融
原文地址:http://blog.csdn.net/huiwuhuiwu/article/details/44395771