簡體   English   中英

C# 中的 std::rotate() 等價物是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM