c# - 使用 concat 附加 '0' 似乎不起作用
问题描述
我有一个程序将两个整数值的长度与此扩展方法进行比较
public static int NumDigits(this int n)
{
if (n < 0)
{
n = (n == int.MinValue) ? int.MaxValue : -n;
}
if (n < 10) return 1;
if (n < 100) return 2;
if (n < 1000) return 3;
if (n < 10000) return 4;
if (n < 100000) return 5;
if (n < 1000000) return 6;
if (n < 10000000) return 7;
if (n < 100000000) return 8;
return n < 1000000000 ? 9 : 10;
}
而且效果很好。当我打印 的值时num1.numDigits()
,该值返回 4(它值 '1111'。而我的另一个整数:num2.numDigits()
返回 2(它是 11)。这很好,但是当我实际比较它们时:
int[] rawNum2 = Arrays.DigitArr(num2);
if (num1.NumDigits() > num2.NumDigits())
{
int diff = num1.NumDigits() - num2.NumDigits();
for (int i = 1; i < diff; i++)
{
rawNum2.Append(0);
}
reversedNum2 = rawNum2.Reverse();
}
reversedNum2 应该是 '0011' 时仍然是 '11'。
这是我编译和使用的类。
public static int[] Append(this int[] source, int value)
{
int[] newValue = source;
newValue = newValue.Concat(new[] { value }).ToArray();
return newValue;
}
public static int[] Reverse(this int[] array)
{
int[] arr = array;
for (int i = 0; i < arr.Length / 2; i++)
{
int tmp = arr[i];
arr[i] = arr[arr.Length - i - 1];
arr[arr.Length - i - 1] = tmp;
}
return arr;
}
public static int[] DigitArr(int n)
{
if (n == 0) return new int[1] { 0 };
var digits = new List<int>();
for (; n != 0; n /= 10)
digits.Add(n % 10);
var arr = digits.ToArray();
Array.Reverse(arr);
return arr;
}
为什么会这样?
解决方案
您正在丢弃该Append
方法的返回值。改变
rawNum2.Append(0);
到
rawNum2 = rawNum2.Append(0);
for
循环内。
推荐阅读
- html - 如何将 lottie 动画渲染为全屏或全容器宽度
- c - 使用指向结构数组的指针不会返回完整的数组
- linux-kernel - 在回调函数外使用 platform_device 指针
- terraform - aws_iam_policy_document On Count Enabled 资源的 DRY 解决方案
- reactjs - 在反应路由器路径道具中使用正则表达式有条件地渲染组件
- reactjs - handleChange 是如何接收 props 的?反应
- flutter - 获取颤振“缩放”小部件画布的 x,y
- reactjs - 有没有办法在 react-admin 的 matchSuggestion 中检查嵌套资源?
- parameters - 如何根据过滤器/参数隐藏/取消隐藏数据值(仅在一列中)?
- python - 如何计算一系列行的平均值