浏览 3073 次
锁定老帖子 主题:4.24学习笔记
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-27
最后修改:2009-04-27
C#中
c#数组的声明方式 int[] intArray; int[] intArray = {99,34,56,12,1}; int[] intArray = new int[5]; int[] intArray = new int[varsize]; int[] intArray = new int[5]{99,34,56,12,1};
从旧数组复制到新数组,2表示新数组开始位置 oldArray.CopyTo(newArray, 2); 循环迭代出Hashtable中对象 foreach(Person p in peopleHashtable) // Will compile but not run! { Response.Write(p.FullName + "<BR/>"); } 正确: foreach (DictionaryEntry de in peopleHashtable) { Response.Write(de.Key.ToString() + ":" + ((Person)de.Value).FullName + "<BR/>"); }
SortedList 1创建空的SortedList 2手动迭代Hashtable的DictionaryEntry(Hashtable是无须存放的) 3把它们添加到SortedList(添加过程中自动排序) 实例: SortedList peopleSortedList = new SortedList(peopleHashtable); foreach (Person p in peopleSortedList.Values) { Response.Write(p.FullName + "<BR/>"); } Response.Write("Index of Srinivasa: " + peopleSortedList.IndexOfKey("ss"));
Queues适合于按照对象进入的顺序来存储它们(先进先出), 而Stack是一个先进后出结构。 但要取的话必须删一个取一个
BitArray
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Collections; /// <summary> ///PersonList 的摘要说明 /// </summary> public class PersonList:System.Collections.IEnumerable { public PersonList() { // //TODO: 在此处添加构造函数逻辑 // } private ArrayList innerList = new ArrayList(); public void Add(Person aPerson) { innerList.Add(aPerson); } public void Remove(Person aPerson) { innerList.Remove(aPerson); } public int Count { get { return innerList.Count; } } //Get/Set element at given index public Person this[int index] { get { return (Person)innerList[index]; } set { innerList[index] = value; } } public IEnumerator GetEnumerator() { return innerList.GetEnumerator(); } }
泛型的Hashtable 和Hashtable区别,读取的时候不需要强制类型转化
LinkedList<T>是一个强类型化的双链接表,该链接表中的每个节点都指向前一个节点和后一个节点
问题:谁能帮我讲解下BinarySearch方法?小女谢谢了。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-28
ArrayList的binary search: // Searches a section of the list for a given element using a binary search // algorithm. Elements of the list are compared to the search value using // the given IComparer interface. If comparer is null, elements of // the list are compared to the search value using the IComparable // interface, which in that case must be implemented by all elements of the // list and the given search value. This method assumes that the given // section of the list is already sorted; if this is not the case, the // result will be incorrect. // // The method returns the index of the given value in the list. If the // list does not contain the given value, the method returns a negative // integer. The bitwise complement operator (~) can be applied to a // negative result to produce the index of the first element (if any) that // is larger than the given search value. This is also the index at which // the search value should be inserted into the list in order for the list // to remain sorted. // // The method uses the Array.BinarySearch method to perform the // search. // public virtual int BinarySearch(int index, int count, Object value, IComparer comparer) { if (index < 0 || count < 0) throw new ArgumentOutOfRangeException((index<0 ? "index" : "count"), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (_size - index < count) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); return Array.BinarySearch((Array)_items, index, count, value, comparer); }
Array的: [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public static int BinarySearch(Array array, int index, int length, Object value, IComparer comparer) { if (array==null) throw new ArgumentNullException("array"); int lb = array.GetLowerBound(0); if (index < lb || length < 0) throw new ArgumentOutOfRangeException((index<lb ? "index" : "length"), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (array.Length - (index - lb) < length) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); if (array.Rank != 1) throw new RankException(Environment.GetResourceString("Rank_MultiDimNotSupported")); if (comparer == null) comparer = Comparer.Default; if (comparer == Comparer.Default) { int retval; bool r = TrySZBinarySearch(array, index, length, value, out retval); if (r) return retval; } int lo = index; int hi = index + length - 1; Object[] objArray = array as Object[]; if(objArray != null) { while (lo <= hi) { // i might overflow if lo and hi are both large positive numbers. int i = GetMedian(lo, hi); int c; try { c = comparer.Compare(objArray[i], value); } catch (Exception e) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), e); } catch { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed")); } if (c == 0) return i; if (c < 0) { lo = i + 1; } else { hi = i - 1; } } } else { while (lo <= hi) { int i = GetMedian(lo, hi); int c; try { c = comparer.Compare(array.GetValue(i), value); } catch (Exception e) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), e); } catch { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed")); } if (c == 0) return i; if (c < 0) { lo = i + 1; } else { hi = i - 1; } } } return ~lo; }
总的来说,就是二分法来查找元素,如果使用此方法前没有排序,或是查找的比较方式和排序的比较方式不一样的话,结果可能找不到。
|
|
返回顶楼 | |
发表时间:2009-04-29
kimmking 写道
ArrayList的binary search: // Searches a section of the list for a given element using a binary search // algorithm. Elements of the list are compared to the search value using // the given IComparer interface. If comparer is null, elements of // the list are compared to the search value using the IComparable // interface, which in that case must be implemented by all elements of the // list and the given search value. This method assumes that the given // section of the list is already sorted; if this is not the case, the // result will be incorrect. // // The method returns the index of the given value in the list. If the // list does not contain the given value, the method returns a negative // integer. The bitwise complement operator (~) can be applied to a // negative result to produce the index of the first element (if any) that // is larger than the given search value. This is also the index at which // the search value should be inserted into the list in order for the list // to remain sorted. // // The method uses the Array.BinarySearch method to perform the // search. // public virtual int BinarySearch(int index, int count, Object value, IComparer comparer) { if (index < 0 || count < 0) throw new ArgumentOutOfRangeException((index<0 ? "index" : "count"), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (_size - index < count) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); return Array.BinarySearch((Array)_items, index, count, value, comparer); }
Array的: [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public static int BinarySearch(Array array, int index, int length, Object value, IComparer comparer) { if (array==null) throw new ArgumentNullException("array"); int lb = array.GetLowerBound(0); if (index < lb || length < 0) throw new ArgumentOutOfRangeException((index<lb ? "index" : "length"), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (array.Length - (index - lb) < length) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); if (array.Rank != 1) throw new RankException(Environment.GetResourceString("Rank_MultiDimNotSupported")); if (comparer == null) comparer = Comparer.Default; if (comparer == Comparer.Default) { int retval; bool r = TrySZBinarySearch(array, index, length, value, out retval); if (r) return retval; } int lo = index; int hi = index + length - 1; Object[] objArray = array as Object[]; if(objArray != null) { while (lo <= hi) { // i might overflow if lo and hi are both large positive numbers. int i = GetMedian(lo, hi); int c; try { c = comparer.Compare(objArray[i], value); } catch (Exception e) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), e); } catch { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed")); } if (c == 0) return i; if (c < 0) { lo = i + 1; } else { hi = i - 1; } } } else { while (lo <= hi) { int i = GetMedian(lo, hi); int c; try { c = comparer.Compare(array.GetValue(i), value); } catch (Exception e) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), e); } catch { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed")); } if (c == 0) return i; if (c < 0) { lo = i + 1; } else { hi = i - 1; } } } return ~lo; }
总的来说,就是二分法来查找元素,如果使用此方法前没有排序,或是查找的比较方式和排序的比较方式不一样的话,结果可能找不到。
|
|
返回顶楼 | |
发表时间:2009-04-29
索菲亚. ぅ 写道 kimmking 写道
ArrayList的binary search: // Searches a section of the list for a given element using a binary search // algorithm. Elements of the list are compared to the search value using // the given IComparer interface. If comparer is null, elements of // the list are compared to the search value using the IComparable // interface, which in that case must be implemented by all elements of the // list and the given search value. This method assumes that the given // section of the list is already sorted; if this is not the case, the // result will be incorrect. // // The method returns the index of the given value in the list. If the // list does not contain the given value, the method returns a negative // integer. The bitwise complement operator (~) can be applied to a // negative result to produce the index of the first element (if any) that // is larger than the given search value. This is also the index at which // the search value should be inserted into the list in order for the list // to remain sorted. // // The method uses the Array.BinarySearch method to perform the // search. // public virtual int BinarySearch(int index, int count, Object value, IComparer comparer) { if (index < 0 || count < 0) throw new ArgumentOutOfRangeException((index<0 ? "index" : "count"), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (_size - index < count) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); return Array.BinarySearch((Array)_items, index, count, value, comparer); }
Array的: [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public static int BinarySearch(Array array, int index, int length, Object value, IComparer comparer) { if (array==null) throw new ArgumentNullException("array"); int lb = array.GetLowerBound(0); if (index < lb || length < 0) throw new ArgumentOutOfRangeException((index<lb ? "index" : "length"), Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum")); if (array.Length - (index - lb) < length) throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen")); if (array.Rank != 1) throw new RankException(Environment.GetResourceString("Rank_MultiDimNotSupported")); if (comparer == null) comparer = Comparer.Default; if (comparer == Comparer.Default) { int retval; bool r = TrySZBinarySearch(array, index, length, value, out retval); if (r) return retval; } int lo = index; int hi = index + length - 1; Object[] objArray = array as Object[]; if(objArray != null) { while (lo <= hi) { // i might overflow if lo and hi are both large positive numbers. int i = GetMedian(lo, hi); int c; try { c = comparer.Compare(objArray[i], value); } catch (Exception e) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), e); } catch { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed")); } if (c == 0) return i; if (c < 0) { lo = i + 1; } else { hi = i - 1; } } } else { while (lo <= hi) { int i = GetMedian(lo, hi); int c; try { c = comparer.Compare(array.GetValue(i), value); } catch (Exception e) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), e); } catch { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed")); } if (c == 0) return i; if (c < 0) { lo = i + 1; } else { hi = i - 1; } } } return ~lo; }
总的来说,就是二分法来查找元素,如果使用此方法前没有排序,或是查找的比较方式和排序的比较方式不一样的话,结果可能找不到。
用在已经排序过了的时候,特别是数据量比较大的时候,可以提高查找效率。 一般不用,也许你一辈子用不着。 ----mm加我qq 3694826 |
|
返回顶楼 | |