在C#中公开实现绳索?

是否在C#中公开实现了Rope数据结构?

值得一提的是, 这是一个不可变的Java实现 。 您可以在不到一个小时的时间内将其转换为C#。

我不知道Rope实现(尽管可能有一个!),但如果你只是在连接之后, StringBuilder将完成这项工作。

Wintellect Power Collections(一个C#数据结构库)中的BigList类在某种程度上类似于rope: http : //docs.pushtechnology.com/docs/4.5.7/dotnet/externalclient/html/class_wintellect_1_1_power_collections_1_1_big_list_3_01_t_01_4.html

我测量了它的性能,它在“字符串插入的开始”中表现相当不错:

 const int InsertCount = 150000; var startTime = DateTime.Now; var ropeOfChars = new BigList(); for (int i = 0; i < InsertCount; i++) { ropeOfChars.Insert(0, (char)('a' + (i % 10))); } Console.WriteLine("Rope time: {0}", DateTime.Now - startTime); startTime = DateTime.Now; var stringBuilder = new StringBuilder(); for (int i = 0; i < InsertCount; i++) { stringBuilder.Insert(0, (char)('a' + (i % 10))); } Console.WriteLine("StringBuilder time: {0}", DateTime.Now - startTime); 

结果:

 Rope time: 00:00:00.0468740 StringBuilder time: 00:00:05.1471300 

但它在“字符串插入的中间”表现不佳:

 const int InsertCount = 150000; var startTime = DateTime.Now; var ropeOfChars = new BigList(); for (int i = 0; i < InsertCount; i++) { ropeOfChars.Insert(ropeOfChars.Count / 2, (char)('a' + (i % 10))); } Console.WriteLine("Rope time: {0}", DateTime.Now - startTime); startTime = DateTime.Now; var stringBuilder = new StringBuilder(); for (int i = 0; i < InsertCount; i++) { stringBuilder.Insert(stringBuilder.Length / 2, (char)('a' + (i % 10))); } Console.WriteLine("StringBuilder time: {0}", DateTime.Now - startTime); 

结果:

 Rope time: 00:00:15.0229452 StringBuilder time: 00:00:04.7812553 

我不确定这是一个错误还是无效的实现,但是“字符串”预计会比C#中的StringBuilder更快。

您可以从NuGet安装Power Collections:

 Install-Package XAct.Wintellect.PowerCollections 

以下是基于上面列出的不可变java实现的C#中Ropes的公共实现。 请注意,您将无法获得与java版本相同的多态性优势,因为无法inheritance字符串,并且C#中本机不存在CharSequence。