寻找能够找到最近邻居的分类C#集合

寻找能够找到最近邻居的分类C#集合,c#,sorting,C#,Sorting,比如说 ISortedMagicCollection<string> collecton = new SortedMagicCollection<string>(); collection.Add("AAA"); collection.Add("CCC"); collection.Add("BBB"); collection.Add("XXX"); collection.Add("DDD"); var points = col

比如说

   ISortedMagicCollection<string> collecton = new SortedMagicCollection<string>();

   collection.Add("AAA");
   collection.Add("CCC");
   collection.Add("BBB");
   collection.Add("XXX");
   collection.Add("DDD");

   var points = collection.FindPrevious("BBB").Take(3).ToList();

   points[0] == "AAA"; // true;
   points[1] == "BBB"; // true;
   points[2] == "CCC"; // true;
ISortedMagicCollection collection=new SortedMagicCollection();
收藏。添加(“AAA”);
收藏。添加(“CCC”);
集合。添加(“BBB”);
收款。添加(“XXX”);
收款。添加(“DDD”);
var points=collection.FindPrevious(“BBB”).Take(3.ToList();
分数[0]=“AAA”//是的;
点[1]=“BBB”//是的;
点[2]=“CCC”//是的;
总之,应始终对列表进行排序,并且应易于获得任何特定项目的最近邻居


请注意,该列表是动态的。项目一直在被添加和删除。

C5库中的TreeSet类就是我想要的

它有一个前置函数


1 | M:C5.TreeSet
1.preference(`0)

您可以使用
SortedList
。然后只需找到键的索引,并通过更改索引获得下一个/上一个键。有什么问题?同步?一个简单的
对于邻居来说是否太贵了?也许
SortedSet
也可以。SortedList的插入-删除性能很差,因为它使用线性数组存储所有节点。然后使用双链接列表并通过二进制搜索找到插入点等?