Ropeのデータ構造体はC#で公開されていますか?C#でのロープの公開実装?
答えて
その価値は、here is an immutable Java implementationです。あなたはおそらくそれを1時間未満でC#に変換することができます。 Wintellectパワーコレクション(C#のデータ構造ライブラリー)から
私はロープの実装を認識していませんが(おそらく1つありますが)、連結した後であればStringBuilderがその仕事をします。
ここでは本当です。私はC言語で実装しましたが、以前はchar配列の 'リンクリスト'を使用していましたが、StringBuilderクラスに勝てなかったのです。 StringBuilderクラスがバッファを割り当て、文字をコピーするためにアクセスできるネイティブメソッドのいくつかにアクセスすることができません。 – esac
@esac - C#の実装(うまくいけば、LGPL/BSD型ライセンスの下で)?おそらく、perfのためのいくつかの追加の戦略を調べることができます。 – torial
@ torial:残念ながら私はもうそれを持っていません。私はマイクロソフトのWindowsチームにいるときにプロトタイプを作成するためにこれを行いました。私がそれを持っていても、私はそれを共有できませんでした、ごめんなさい! – esac
BigList<T>
クラスはロープに何とか似ています 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
しかし、それはSTRの途中」でよくない行い、 INGの挿入 ":
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
私はこれはバグかunefficient実装ですが、あればわからない" rope of chars
は、「C#でStringBuilder
こと速くなることが期待されます。
あなたはNuGetから電源のコレクションをインストールすることができます。
Install-Package XAct.Wintellect.PowerCollections
- 1. C#での公開インタフェースの実装に関する問題
- 2. 未実装:DSA公開鍵
- 3. C++でのCOMインターフェイスの実装、公開されていないメソッド
- 4. RSA公開鍵への公開鍵c#
- 5. C++で公開鍵暗号を実装する簡単な方法は?
- 6. C#コンソールアプリケーションの公開
- 7. 私のウェブサイトにRubyファイルを公開し実装する方法
- 8. Springデータレストエンドポイントのカスタム実装を公開する方法
- 9. COMに公開されているC#オブジェクトにISupportErrorInfoを実装する
- 10. ロープのcocos2d&box2d
- 11. 公開サフィックスリストC#パーサー
- 12. クラスで実装されているC#インターフェイスメソッドを公開する必要があるのはなぜですか?
- 13. C++の実装
- 14. C#でXBAPのバージョンを公開する
- 15. C++でのロックフリーキャッシュの実装
- 16. C++でのバブルソートの実装
- 17. C#でのSlowSortの実装
- 18. CでのMVarの実装?
- 19. C#でのファクトリパターンの実装
- 20. CでのECCの実装
- 21. C++でのディスジョイントセットの実装
- 22. C++でのインターフェイスの実装
- 23. C++/CLIでマネージC#を公開する
- 24. C#クライアントでC#を公開する
- 25. generic linklist C++での実装
- 26. C++でのドットプロダクト実装
- 27. C++ 11でhas_equal_operatorの実装
- 28. EDI X12の実装でC#
- 29. C#でのSIFT実装
- 30. HashMap実装でのセグメンテーションフォールトC++
あなたは、このデータ構造は文字列ビルダより最適なシナリオを持っている場合、私はそれが何であるかを知りたいだろう。私の経験では、ロープのデータ構造は、典型的なケースではネイティブの文字列やストリングビルダの処理速度に勝ることはほとんどありませんでした。そのため、実際のシナリオを見て非常に興味があります。 –
私はとても好奇心が強いので、別の質問があるのです! – luvieere
1つのタスクでは、空の文字列から始め、文字列の途中に何百万回も文字を挿入したいと考えています。この場合、文字列は効率的ではありません。ロープは元の形では正しくないかもしれませんが、私はそれを私の特定のアプリケーションに適応させることができます。 – user172818