我正在尋找一種將大型int []轉換爲csv字符串的字符串[]的有效方法,其中每個csv被限制爲最多4000個字符。數組中的值可以是1和int.MaxValue之間的任何值。將數組拆分爲大小受限的CSV字符串
這是我的最終代碼:
public static string[] GetCSVsFromArray(int[] array, int csvLimit)
{
List<string> parts = new List<string>();
StringBuilder sb = new StringBuilder();
foreach(int id in array)
{
string intId = id.ToString();
if (sb.Length + intId.Length < csvLimit)
sb.Append(intId).Append(",");
else
{
if (sb.Length > 0)
sb.Length--;
parts.Add(sb.ToString());
sb.Length = 0;
}
}
if(sb.Length>0)
parts.Add(sb.ToString());
return parts.ToArray();
}
有沒有更有效的方式來做到這一點?
所以這是我現在用(我能夠返回參數更改爲列表類型保存在年底ToArray的()調用):
public static List<string> GetCSVsFromArray(int[] array, int csvLimit)
{
List<string> parts = new List<string>();
StringBuilder sb = new StringBuilder();
foreach(int id in array)
{
string intId = id.ToString();
if (sb.Length + intId.Length < csvLimit)
sb.Append(intId).Append(",");
else
{
if (sb.Length > 0)
sb.Length--;
parts.Add(sb.ToString());
sb.Length = 0;
}
}
if(sb.Length>0)
parts.Add(sb.ToString());
return parts;
}
性能測試結果:
4000個字符- 原始
10,000,000項目CSV限制:2,887.488ms
- GetIntegerDigitCount:3105.355ms
- 決賽:2883.587ms
雖然我只保存4ms的去除ToArray的()我的開發機器上調用這個似乎使慢得多的機器(在DELL D620保存200ms以上)上顯著差異
你正在做冗餘'parts.ToArray()'機罩 – sll 2012-02-17 12:38:22
下做了所有項目的內存拷貝你扔掉的價值intId當你創建一個新的行? – Huusom 2012-02-17 12:39:54
我爲什麼會得到[你自己的CSV解析器](http://secretgeek.net/csv_trouble.asp)的印象?請不要這樣做。不要寫這樣的代碼。 – 2012-02-17 12:52:30