, , . - SortedDictionary, - , O (log (n)). , , , . CompareTo, , , /, .
public struct Range : IComparable<Range>
{
public int From;
public int To;
public Range(int point)
{
From = point;
To = point;
}
public Range(int from, int to)
{
From = from;
To = to;
}
public int CompareTo(Range other)
{
if (From <= other.To && To >= other.From)
{
return 0;
}
return From.CompareTo(other.From);
}
}
public class RangeDictionary
{
private static SortedDictionary<Range, string> _ranges = new SortedDictionary<Range, string>();
public RangeDictionary()
{
_ranges.Add(new Range(1, 1000), "Alice");
_ranges.Add(new Range(1001, 2000), "Bob");
_ranges.Add(new Range(2001, 3000), "Carol");
}
public string Lookup(int key)
{
var keyAsRange = new Range(key);
string value;
if (_ranges.TryGetValue(keyAsRange, out value))
{
return value;
}
return null;
}
}
var ranges = new RangeDictionary();
var value = ranges.Lookup(1356);
value "Bob", 1356 1001-2000.
, , . .
SortedList , ( ), / . ( ) . , # Dictionary GetHashCode Equals .