公共实现在C#中的绳索?

是否有在C#中的Rope数据结构的公共实现?


对于它的价值,这里是一个不可变的Java实现。 您可能可以在不到一个小时内将其转换为C#。


我没有意识到一个Rope实现(虽然可能有一个!),但是如果你只是在串联之后,StringBuilder才能完成这项工作。


Wintellect Power Collections(C#数据结构库)中的BigList<T>类在某种程度上类似于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<char>();
for (int i = 0; i < InsertCount; i++)
{
    ropeOfChars.Insert(0, (char)('a' + (i % 10)));
}
Console.WriteLine("Rope<char> 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<char> time: 00:00:00.0468740
StringBuilder time: 00:00:05.1471300

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

const int InsertCount = 150000;

var startTime = DateTime.Now;
var ropeOfChars = new BigList<char>();
for (int i = 0; i < InsertCount; i++)
{
    ropeOfChars.Insert(ropeOfChars.Count / 2, (char)('a' + (i % 10)));
}
Console.WriteLine("Rope<char> 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<char> time: 00:00:15.0229452
StringBuilder time: 00:00:04.7812553

我不知道这是否是一个错误或执行效率不高,但“ rope of chars ”有望更快一些StringBuilder在C#。

您可以从NuGet安装Power Collections:

Install-Package XAct.Wintellect.PowerCollections
链接地址: http://www.djcxy.com/p/39793.html

上一篇: Public implementation of ropes in C#?

下一篇: Is using Random and OrderBy a good shuffle algorithm?