在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。
上述就是C#学习教程:在C#中公开实现绳索?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949417.html