我想得到一个数字的长度。我知道我可以使用while循环并除以10直到数字达到0,但是这需要大约10行代码,而且我认为这样做会更快,更高效。 >
using System;
int[] array = new int[5]{1,12,123,1234,12345};
int[] length = new int[array.Length];
int i = 0;
while (i < 0)
{
length[i] = int.Parse(((array[i]).ToString()).Length);
i++;
}
i = 0;
while (i < array.Length)
{
Console.Write("{0} ", length);
i++;
}
出于某种原因,当我告诉它打印每个数字的代码长度而不是仅打印system.int32 [] 5次时打印出length(1、2、3、4、5)
答案 0 :(得分:2)
您不必解析.Length
,因为Length
返回int
;您的代码已修改:
int[] array = new int[] {1, 12, 123, 1234, 12345};
//TODO: you may want to put a better name here, say, digitCount
// see comments below
int[] length = new int[array.Length];
for (int i = 0; i < array.Length; ++i)
length[i] = array[i].ToString().Length;
for (int i = 0; i < length.Length; ++i)
Console.Write("{0} ", length[i]);
您可以在 Linq 的帮助下查询array
:
using System.Linq;
...
int[] array = new int[] {1, 12, 123, 1234, 12345};
int[] length = array
.Select(item => item.ToString().Length)
.ToArray();
并在length
的帮助下一次性打印Join
:
Console.Write(string.Join(" ", length));
答案 1 :(得分:1)
这是因为length
是一个数组,而不是实际项目(我想您要打印)。修复很容易,将Console.Write("{0} ", length);
替换为Console.Write("{0} ", length[i]);
以下是您的代码提示:
我看到您正在使用while
循环遍历所有地方,因此,让我向您介绍一下另一种循环类型for
循环。 for
通常用于执行x次操作,其结构如下:
for (int i = 0; i < length.Length; i++)
这看似复杂,但实际上很简单,请允许我解释一下。我们可以将for
循环分为3个部分。迭代器声明,迭代条件和增量。 int i = 0
是迭代器声明,这里我们声明并定义一个名为i
的变量,该变量是一个值为int
的{{1}}。在下一个块(0
中,我们声明条件,当条件为i < length
时,我们继续进行;当条件为false时,我们停止循环。最后是增量或步进(true
),它在每个循环后执行,并将迭代器(在这种情况下为i++
递增1。用i
循环重写代码会导致:这个:
for
这仍然可以进一步改善,例如,当前我们在本质上相同的数据上进行两次迭代,这意味着我们在浪费时间。而且,由于数组在C#中是可枚举的,因此我们可以使用int[] array = new int[] {1, 12, 123, 1234, 12345};
int[] length = new int[array.Length];
for (int i = 0; i < array.Length; i++)
{
length[i] = int.Parse(((array[i]).ToString()).Length);
}
for (int i = 0; i < length.Length; i++)
{
Console.WriteLine("{0} ", length[i]);
}
循环。这是另一种循环类型,与foreach
循环几乎相同,但是我们没有花x倍的时间来处理可枚举的每个元素。使用它,我们可以做到这一点:
for
我还使用了一种叫做string interpolation(在int[] array = new int[] {1, 12, 123, 1234, 12345};
foreach (int element in array)
{
Console.WriteLine($"{element.ToString().Length} ");
}
之前的$
)