আমি এটি দেখার জন্য উন্মুক্ত রিফ্লেক্টরকে ক্র্যাক করেছি কারণ এটি সম্পর্কে কিছুটা বিভ্রান্তি আছে বলে মনে হচ্ছে SortedList
। এটি বাস্তবে কোনও বাইনারি অনুসন্ধানের গাছ নয়, এটি মূল-মান জোড়ার সাজানো (কী দ্বারা) অ্যারে । এখানে একটি TKey[] keys
ভেরিয়েবল রয়েছে যা কী-মান জোড়ার সাথে সিঙ্কে বাছাই করা হয় এবং বাইনারি অনুসন্ধানে ব্যবহৃত হয়।
আমার দাবির ব্যাকআপ নেওয়ার জন্য এখানে কিছু উত্স (টার্গেট। নেট 4.5) রয়েছে।
ব্যক্তিগত সদস্যরা
// Fields
private const int _defaultCapacity = 4;
private int _size;
[NonSerialized]
private object _syncRoot;
private IComparer<TKey> comparer;
private static TKey[] emptyKeys;
private static TValue[] emptyValues;
private KeyList<TKey, TValue> keyList;
private TKey[] keys;
private const int MaxArrayLength = 0x7fefffff;
private ValueList<TKey, TValue> valueList;
private TValue[] values;
private int version;
সাজানো তালিকাসমূহ (আইডোরিয়াম, আইকোম্পার)
public SortedList(IDictionary<TKey, TValue> dictionary, IComparer<TKey> comparer) : this((dictionary != null) ? dictionary.Count : 0, comparer)
{
if (dictionary == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.dictionary);
}
dictionary.Keys.CopyTo(this.keys, 0);
dictionary.Values.CopyTo(this.values, 0);
Array.Sort<TKey, TValue>(this.keys, this.values, comparer);
this._size = dictionary.Count;
}
সাজানো তালিকা.এড (টি কে, টিভিয়াল): শূন্য v
public void Add(TKey key, TValue value)
{
if (key == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key);
}
int num = Array.BinarySearch<TKey>(this.keys, 0, this._size, key, this.comparer);
if (num >= 0)
{
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
}
this.Insert(~num, key, value);
}
সাজানো তালিকাগুলি সরানোআউট (ইনট): শূন্য
public void RemoveAt(int index)
{
if ((index < 0) || (index >= this._size))
{
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_Index);
}
this._size--;
if (index < this._size)
{
Array.Copy(this.keys, index + 1, this.keys, index, this._size - index);
Array.Copy(this.values, index + 1, this.values, index, this._size - index);
}
this.keys[this._size] = default(TKey);
this.values[this._size] = default(TValue);
this.version++;
}