C#位图算法
在處理表格合并等問題時,可以考慮采用位圖算法實現(xiàn)二維存儲對象的處理
通過Map.Set設(shè)置點值或Map.Fill填充區(qū)域。 判斷各點值時通過Map.Get獲取
擴展Point屬性可以改成3維或更多維實現(xiàn)多維存儲對象的處理
/// <summary> /// 二維圖形算法 /// 王洪岐 121226 /// </summary> /// <typeparam name="T"></typeparam> public class Map<T> { private Dictionary<Point, T> _map; /// <summary> /// 構(gòu)建圖 /// </summary> /// <param name="x"></param> /// <param name="y"></param> public Map() { _map = new Dictionary<Point, T>(); } /// <summary> /// 填充圖 /// </summary> /// <param name="a"></param> /// <param name="b"></param> public void Fill(Point a, Point b, T value) { for (int x = Math.Min(a.X, b.X); x <= Math.Max(a.X, b.X); x++) { for (int y = Math.Min(a.Y, b.Y); y <= Math.Max(a.Y, b.Y); y++) { _map[new Point(x, y)] = value; } } } /// <summary> /// 設(shè)置單點值 /// </summary> /// <param name="a"></param> /// <param name="value"></param> public void Set(Point p, T value) { _map[p] = value; } /// <summary> /// 獲取單點值 /// </summary> /// <param name="p"></param> /// <returns></returns> public T Get(Point p) { return _map.ContainsKey(p) ? _map[p] : default(T); } /// <summary> /// 顯示點 /// </summary> /// <returns></returns> public string ShowPoint() { int intMaxX= _map.Keys.Max(p=>p.X); int intMaxY= _map.Keys.Max(p=>p.Y); StringBuilder sbReturn = new StringBuilder(); for (int y = 0; y <= intMaxY; y++) { for (int x = 0; x <= intMaxX; x++) { sbReturn.Append(_map.ContainsKey(new Point(x, y))?"1":"0"); } sbReturn.Append("\n"); } return sbReturn.ToString(); } } /// <summary> /// 點坐標(biāo) /// </summary> public struct Point { private int _X; private int _Y; /// <summary> ///? /// </summary> /// <param name="x"></param> /// <param name="y"></param> public Point(int x, int y) { _X = x; _Y = y; } /// <summary> /// X /// </summary> public int X { get { return _X; } set { _X = value; } } /// <summary> /// Y /// </summary> public int Y { get { return _Y; } set { _Y = value; } } }
通過Map.Set設(shè)置點值或Map.Fill填充區(qū)域。 判斷各點值時通過Map.Get獲取
擴展Point屬性可以改成3維或更多維實現(xiàn)多維存儲對象的處理
/// <summary> /// 二維圖形算法 /// 王洪岐 121226 /// </summary> /// <typeparam name="T"></typeparam> public class Map<T> { private Dictionary<Point, T> _map; /// <summary> /// 構(gòu)建圖 /// </summary> /// <param name="x"></param> /// <param name="y"></param> public Map() { _map = new Dictionary<Point, T>(); } /// <summary> /// 填充圖 /// </summary> /// <param name="a"></param> /// <param name="b"></param> public void Fill(Point a, Point b, T value) { for (int x = Math.Min(a.X, b.X); x <= Math.Max(a.X, b.X); x++) { for (int y = Math.Min(a.Y, b.Y); y <= Math.Max(a.Y, b.Y); y++) { _map[new Point(x, y)] = value; } } } /// <summary> /// 設(shè)置單點值 /// </summary> /// <param name="a"></param> /// <param name="value"></param> public void Set(Point p, T value) { _map[p] = value; } /// <summary> /// 獲取單點值 /// </summary> /// <param name="p"></param> /// <returns></returns> public T Get(Point p) { return _map.ContainsKey(p) ? _map[p] : default(T); } /// <summary> /// 顯示點 /// </summary> /// <returns></returns> public string ShowPoint() { int intMaxX= _map.Keys.Max(p=>p.X); int intMaxY= _map.Keys.Max(p=>p.Y); StringBuilder sbReturn = new StringBuilder(); for (int y = 0; y <= intMaxY; y++) { for (int x = 0; x <= intMaxX; x++) { sbReturn.Append(_map.ContainsKey(new Point(x, y))?"1":"0"); } sbReturn.Append("\n"); } return sbReturn.ToString(); } } /// <summary> /// 點坐標(biāo) /// </summary> public struct Point { private int _X; private int _Y; /// <summary> ///? /// </summary> /// <param name="x"></param> /// <param name="y"></param> public Point(int x, int y) { _X = x; _Y = y; } /// <summary> /// X /// </summary> public int X { get { return _X; } set { _X = value; } } /// <summary> /// Y /// </summary> public int Y { get { return _Y; } set { _Y = value; } } }
總結(jié)
- 上一篇: web前端如何提升自我
- 下一篇: 【C#】通过Devcon.exe控制设备