[英]In C#, How can I iterate through a entire 2D Array and count the number of 0s?
[英]Given a number and a length, prepend (length - number.count) 0s to that int in a performant manner in C#
我正在嘗試創建一個輔助函數,該函數將 x 數量的零添加到整數,其中 x 是給定長度與該 int 中的字符數之間的差值。
例如:
// data = 9573132375
// length = 15
// should return (15 - 10) 000009573132375
public string ModulateData(long data, int length)
{
if (data.ToString().Length <= length)
{
int noToPrepend = length - data.ToString().Length;
string leadingzeros = "";
for (int i = 0; i < noToPrepend; i++)
{
leadingzeros += "0";
}
return leadingzeros + data.ToString();
}
return "";
}
我只能想到將數據變量轉換為字符串,在前面加上 0,然后再將字符串轉換回整數。 但是,我擔心這種方法的性能,因為這種方法將成為我核心設計的一部分,它需要盡可能提高性能。 有沒有更快的方法可以做到這一點? 我當前的代碼是否有任何性能損失?
編輯我將數據變量作為請求數據傳遞給接受字節的機器,所以我將使用這個函數如下 -
string requestdata = "";
requestdata += ModulateData(x,20);
requestdata += ModulateData(y,5);
requestdata += ModulateData(z,10); // Could be about 20 or so lines like this.
之后,我會將 requestdata 轉換為十六進制格式的字節數組。 我已經有了工作代碼。
較短的版本:
public static string ModulateData(long data, int length) =>
(data.ToString().Length <= length)
? $"{new string('0', length - data.ToString().Length)}{data}"
: string.Empty;
如果需要,還有更多可調試的版本:
public static string ModulateData(long data, int length)
{
var dataAsText = data.ToString();
if (dataAsText.Length <= length)
{
int noToPrepend = length - dataAsText.Length;
var leadingZeros = new string('0', noToPrepend);
return $"{leadingZeros}{dataAsText}";
}
return string.Empty;
}
還有一個用法:
// to make this more optimal you can calculate the StringBuilder initial capacity here,
// by taking into account possible characters length output
var requestData = new StringBuilder();
requestData.Append(ModulateData(x, 20));
requestData.Append(ModulateData(y, 5));
requestData.Append(ModulateData(z, 10));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.