ブックマーク開始とブックマークの終了が共にゼロベースの整数である場合には、それらを単純な配列に格納することができます。辞書を使用すると、それはもはやO(1)ではなく、それに非常に近いものです。
3つのフィールドを持つ基本オブジェクトを作成し、2つの配列を実際のデータのインデックスとして使用します。
public class Bookmark
{
public int ID { get; set; }
public int Start { get; set; }
public int End { get; set; }
}
// setting up your bookmark indices
const int NumBookmarks = 200;
Bookmark[] startIndices = new Bookmark[NumBookmarks];
Bookmark[] endIndices = new Bookmark[NumBookmarks];
// add a new bookmark
Bookmark myBookmark = new Bookmark(){ID=5, Start=10, End=30};
startIndices[myBookmark.Start] = myBookmark;
endIndices[myBookmark.End] = myBookmark;
// get a bookmark
Bookmark myBookmark = startIndices[10];
もちろん、配列を使用することはおそらく最も柔軟性がありませんが、最も高速になります。
絶対速度が必要ない場合は、List
を作成し、Find
メソッドを使用できます。
Bookmark myBookmark = myBookmarks.Find(x=>x.Start==10);
.NETで['Boost.MultiIndex'](http://www.boost.org/doc/libs/1_49_0/libs/multi_index/doc/index.html)を持っているのは素晴らしいことではありませんか? – Oliver