簡體   English   中英

將數組轉換為多行字符串的最快方法

[英]fastest way to convert array to multiline string

將數組元素導出到.csv excel文件中的最有效方法是什么? 現在我這樣做,但速度很慢。 感謝你的支持。

int FrameWidth = 640;
int FrameHeight = 480;
Int16[] Values;  // 640 x 480, 307200 elements

/*
.. processing ...... 
*/

//Exporting Values to .csv file
string string2csv = null;
for (int y = 0; y < FrameHeight; y++)
{
    for (int x = 0; x < FrameWidth; x++)
    {
        string2csv = string2csv + Values[y * FrameWidth + x] + ";";
    }
    string2csv = string2csv + "\n";
}
File.WriteAllText("string2csv.csv", string2csv);

另一種方法是組合File.WriteAllLinesstring.Join ;

File.WriteAllLines ("test.txt", 
    Values.Select((x,i) => new {x, i})
          .GroupBy(x => x.i / FrameWidth)
          .Select(grp => string.Join(";", grp.Select(y => y.x)))
);

它將選擇所有元素以及數組中的索引。
然后,它將按行對值進行分組(通過將索引除以列數計算得出)。
然后使用以下方式連接分組的值; 每行一個字符串,行全部輸入File.WriteAllLines。

“效率最高”會接受試驗和錯誤,但一個簡單的替代方法是使用StringBuilder

StringBuilder string2csv = new StringBuilder();
for (int y = 0; y < FrameHeight; y++)
{
    for (int x = 0; x < FrameWidth; x++)
    {
        string2csv.Append(Values[y * FrameWidth + x] + ";");
    }
    string2csv.Append("\n");
}

使用+為新字符串分配內存,然后將兩個字符串的內容復制到新內存中。 StringBuilder在內存中預先分配緩沖區,並將字符添加到緩沖區,並根據需要進行擴展。 添加大量字符串時,內存分配和復制的次數要少得多。

這可能“足夠快”。 除此之外,您需要獲得一個不錯的分析器,以查看您的代碼花費最多的時間並攻擊該部分。 您的“處理...”塊完全可能是瓶頸,而不是CSV輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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