Объединить массив int в один int - PullRequest
0 голосов
/ 05 июля 2018

Я хочу объединить целочисленный массив в одно целочисленное значение. Итак, у меня есть следующий код, который объединит массив в одно значение.

int[] array = { 5, 6, 2, 4 };
int combine = 0;

for (int i = 0; i < array.Length; i++)
{
    combine += array[i] * Convert.ToInt32(Math.Pow(10, array.Length-i-1));
}

этот комбайн = 5624. Что правильно.

Моя проблема в том, что мой массив не имеет форму 0-9. Таким образом, мой массив может быть {51,62,23,44}

int[] array = { 51, 62, 23, 44 };
int combine = 0;

for (int i = 0; i < array.Length; i++)
{
    combine += array[i] * Convert.ToInt32(Math.Pow(10, array.Length-i-1));
}

получая комбинат как 574774, а не 51622344. Как бы это исправить?

Ответы [ 4 ]

0 голосов
/ 06 июля 2018

Попробуйте использовать StringBuilder, например:

using System;
using System.Text;
public class Program {
       public static void Main(string[] args) {
             StringBuilder sb = new StringBuilder();
             int[] array = new Int[] { 51, 62, 23, 44 };
             int combine = 0;
             foreach(int single in array) {
                    string oneNum = single.ToString();
                    sb.Append(oneNum);
             }
             string final = sb.ToString();
             combine = Convert.ToInt32(final);
       }
}

Это преобразует числа в массиве в строку, которая затем преобразуется в число.

0 голосов
/ 05 июля 2018

Выполните следующие действия:

var number = int.Parse(string.Join("", array));

Пояснение:

string.Join примет любое перечисление типа T, вызовет ToString() для каждого члена и объединит их в одну строку с указанным разделителем.

Когда у вас есть строка, представляющая ваш номер, вы просто анализируете ее, чтобы получить сам номер.

Конечно, это небезопасно, и в зависимости от ваших возможных вводов, это может не сработать: {1, 4, -5, 4 }. Некоторое обнаружение ошибок и, вероятно, int.TryParse - это лучший способ решить эту проблему, например, просто передать идею.

0 голосов
/ 06 июля 2018

Linq и некоторая простая математика могут помочь здесь (без строк или Math.Pow). Я также собираюсь засечь это числами различной величины (то есть, не всеми однозначными числами или всеми двузначными числами). Сначала предварительный код:

  private readonly int[] PowersOf10 = new [] {10, 100, 1000, 10000, 100000};
  private int DecimalShiftAccumulate(int numToShift, int numToAdd)
  {
      var nextPowerOf10 = PowersOf10.First(x => x > numToAdd);
      return (numToShift * nextPowerOf10) + numToAdd;
  }

Вы можете включить больше чисел в массив PowersOf10; Мне надоело считать нули.

Затем объявите массив int и вычислите результат:

 var intArray = new[] { 1051, 7, 923, 44 };
 var arrayResult = intArray.Aggregate((a, b) => DecimalShiftAccumulate(a, b));

Я получаю arrayesult = 1051792344 (т.е. (используя & в качестве конкатенации) 1051 & 7 & 923 & 44)

0 голосов
/ 05 июля 2018

Почему бы не преобразовать их в строки, а затем объединить?

using System;

public class Program
{
    public static void Main()
    {
        int[] intArray = { 5, 6, 2, 4 };
        var result = string.Concat(intArray);

        Console.WriteLine(result);

        try {
            int resultNumber = int.Parse(result);
        }
        catch(OverflowException) {
            // this can occur if you exceed the maximum value of an int
            long resultBigNumber = long.Parse(result);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...