首页 / C# / 整数区间及区间集合(C#实现)
整数区间及区间集合(C#实现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了整数区间及区间集合(C#实现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3592字,纯文字阅读大概需要6分钟。
内容图文
1 /// <summary> 2 /// 整数区间类 3 /// </summary> 4 private class Interval 5 { 6 private int _start = 0, _end = 0; 7publicint Start 8 { 9get { return Math.Min(this._start, this._end); } 10set { this._start = value; } 11 } 12publicint End 13 { 14get { return Math.Max(this._start, this._end); } 15set { this._end = value; } 16 } 17publicbool Inside(int Value) 18 { 19return (Start <= Value && Value <= End); 20 } 21///<summary> 22/// 区间求并运算,此方法不修改当前实例的值。 23/// 若不可合并则返回null,否则返回新的区间。 24///</summary> 25///<param name="OtherInterval">另一个区间</param> 26///<returns>新的区间实例</returns> 27public Interval Merge(Interval OtherInterval) 28 { 29if (this.Start - OtherInterval.End > 1 || OtherInterval.Start - this.End > 1) 30 { 31returnnull; 32 } 33else 34 { 35returnnew Interval() 36 { 37 Start = Math.Min(this.Start, OtherInterval.Start), 38 End = Math.Max(this.End, OtherInterval.End) 39 }; 40 } 41 } 42 } 43///<summary> 44/// 区间集合类 45///</summary> 46privateclass IntervalCollection 47 { 48public List<Interval> Intervals = new List<Interval>(); 49///<summary> 50/// 将一个区间并入区间集合中 51///</summary> 52///<param name="Start">开始位置</param> 53///<param name="End">结束位置</param> 54publicvoid Add(int Start, int End) 55 { 56this.Add(new Interval() { Start = Start, End = End }); 57 } 58///<summary> 59/// 将一个区间并入区间集合中 60///</summary> 61///<param name="NewInterval">需要并入的区间结构</param> 62publicvoid Add(Interval NewInterval) 63 { 64 Interval MergeInterval = null; 65for (int i = 0; i < this.Intervals.Count; i++) 66 { 67 MergeInterval = this.Intervals[i].Merge(NewInterval); 68if (MergeInterval != null) 69 { 70this.Intervals[i] = MergeInterval; 71break; 72 } 73 } 74if (MergeInterval == null) 75 { 76 Intervals.Add(NewInterval); 77 } 78 } 79///<summary> 80/// 检测区间集中是否包含有指定值 81///</summary> 82///<param name="Value">需要查询的数值</param> 83///<returns>包含返回true,否则返回false</returns> 84publicbool Inside(int Value) 85 { 86foreach (Interval Inter in Intervals) 87 { 88if (Inter.Inside(Value) == true) 89 { 90returntrue; 91 } 92 } 93returnfalse; 94 } 95///<summary> 96/// 将区间集的转换为字符串 97///</summary> 98///<typeparam name="T">转换类型</typeparam> 99///<param name="CompleteSet">全集,当序列化后若长度过长则用以求取补集</param>100///<returns>返回转换后的字符串</returns>101publicstring ToString<T>(string CompleteSet = null) 102 { 103 StringBuilder Str = new StringBuilder("["); 104foreach (Interval Inter in Intervals) 105 { 106if (Inter.Start == Inter.End) 107 { 108 dynamic Vs = (object)Inter.Start; 109 Str.Append((T)Vs); 110 } 111elseif (Inter.End - Inter.Start == 1) 112 { 113 dynamic Vs = (object)Inter.Start; 114 dynamic Ve = (object)Inter.End; 115 Str.Append((T)Vs).Append((T)Ve); 116 } 117else118 { 119 dynamic Vs = (object)Inter.Start; 120 dynamic Ve = (object)Inter.End; 121 Str.AppendFormat("{0}-{1}", (T)Vs, (T)Ve); 122 } 123 } 124 Str.Append("]"); 125if (Str[1] == ‘^‘) 126 { 127 Str = Str.Replace("^", "\\^", 0, 1); 128 } 129// 求取补集以试图缩小代码长度130if (Str.Length >= 10 && CompleteSet != null) 131 { 132 StringBuilder Complement = new StringBuilder("[^"); 133foreach (char c in CompleteSet) 134 { 135if (this.Inside(c) == false) 136 { 137 Complement.Append(c); 138 } 139 } 140 Complement.Append("]"); 141if (Complement.Length <= Str.Length) 142 { 143return Complement.ToString(); 144 } 145 } 146return Str.ToString(); 147 } 148 }
原文:http://www.cnblogs.com/rexfield/p/3551550.html
内容总结
以上是互联网集市为您收集整理的整数区间及区间集合(C#实现)全部内容,希望文章能够帮你解决整数区间及区间集合(C#实现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。