[英]What is the std::rotate() equivalent in C#?
我正在從 C++ 轉向 C#,但在將我的項目轉換為 C# 時遇到了麻煩。 如何執行
std::rotate(alphabet.rbegin(), alphabet.rbegin() + 1, alphabet.rend());
借助 C# 工具,其中alphabet
是帶有基本字母表的std::string
。
沒有標准庫函數可以為您執行此操作,您需要自己實現它。 這可能是最簡單的方法:
var result = alphabet.Substring(1) + alphabet[0];
這將執行兩個字符串分配,一個用於Substring
,另一個用於最終結果。 如果您的字符串很小並且這不是您代碼中的熱門路徑,那就足夠了。 如果您關心最大化效率,請使用 .NET Core 3.0 中的新string.Create
重載:
var result = string.Create(alphabet.Length, alphabet, (span, source) =>
{
for (var i = 1; i < source.Length; ++i)
{
span[i - 1] = source[i];
}
span[source.Length - 1] = source[0];
});
String.Create 基本上將一些狀態作為其輸入,然后是關於如何使用該狀態填充新字符串的Span<char>
的方法。 在這種情況下,狀態是您的源alphabet
字符串,配方是“遍歷source
跳過其第一個字母並將其復制到新字符串,然后在末尾添加source
的第一個字母”。
請注意,僅當您創建大量此類旋轉時,第二種解決方案才適用。 單線更容易理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.