有什么办法可以将int转换为字符串,然后再次转换为int

时间:2019-11-01 12:32:27

标签: c# int tostring

我想得到一个数字的长度。我知道我可以使用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)

2 个答案:

答案 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} "); } 之前的$