ArrayList из целых чисел в один int? - PullRequest
4 голосов
/ 02 июня 2009

Какой был бы самый простой способ преобразовать ArrayList из Integer в одно целое число с первым целым числом в списке, являющимся первым числом в целом и т. Д. В Java?

Например, ArrayList из Целых чисел: 1 4 6 7 8 3 8
становится значением int 1467838

Ответы [ 11 ]

15 голосов
/ 02 июня 2009

Самый простой способ в Java:

int total = 0;
for (Integer i : list) { // assuming list is of type List<Integer>
    total = 10*total + i;
}

Например, если список состоит из 1 4 6 7 8 3 8, вы получите:

  • total = 0
  • total = 10*0 + 1 = 1
  • total = 10*1 + 4 = 14
  • total = 10*14 + 6 = 146
  • ...
  • total = 10*146783 + 8 = 1467838

правильный ответ.

5 голосов
/ 02 июня 2009

Примечание: самый простой не всегда самый эффективный. это в Java, так как вы не указали язык. но вы могли бы сделать что-то вроде этого:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(4);
list.add(6);

for (Integer x : list) {
    s += x.toString();
}

Integer finalResult = Integer.parseInt(s);

РЕДАКТИРОВАТЬ : чтобы угодить всем людям, отмечающим это в комментариях, если вы действительно беспокоитесь об эффективности, но по какой-то причине хотите использовать этот строковый метод, это следует сделать так:

StringBuilder sb = new StringBuilder();
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(4);
list.add(6);

String s;

for (Integer x : list) {
    sb.append(x.toString());
}

Integer finalResult = Integer.parseInt(sb.toString());

В первом примере StringBuilder не использовался для простоты, потому что это похоже на домашнее задание.

4 голосов
/ 02 июня 2009

Предполагается C # (вы не указали :-), но общий алгоритм будет работать на любом языке, который вам нужен:

int num = 0;
for( int i = 0 ; i < list.Count ; i++ ) 
{
    num *= 10;
    num += (int)list[i];
}

Очевидно, что код предполагает, что результирующее число достаточно мало, чтобы быть представленным int, и что каждый из элементов в вашем ArrayList находится между 0 и 9 включительно.

1 голос
/ 02 июня 2009

Только обрабатывает числа до 2 миллиардов или около того. Используйте long, long-long или ваш любимый класс bigint, если вы хотите большие числа. Не будет работать с отрицательными числами, если они все не отрицательные.

int runningtotal = 0;
foreach(int i in myList) {
    runningtotal *= 10;
    runningtotal += i;
}
return runningtotal;
0 голосов
/ 15 июля 2009

Другое решение, это будет принимать цифры> 9

List<Integer> list = 
int num = Integer.parseInt(list.toString().replaceAll("\\D",""));
0 голосов
/ 02 июня 2009

В Хаскеле,

listToNumber = foldl (\a b -> a*10 + b) 0

В Python,

def list_to_number(some_list):
    return reduce(lambda x, y: x*10 + y, some_list, 0)
0 голосов
/ 02 июня 2009

В Python! Просто для удовольствия:

i = int ("" .join ([str (z) для z в x]))

0 голосов
/ 02 июня 2009

Я предполагаю из вашего вопроса, что индекс 0 ArrayList является наиболее значимым значением. Ваш пример показывает, что первое число эквивалентно 1 000 000.

Вы можете рассматривать их как символы, затем объединять их, а затем анализировать до Integer.

Или вы можете добавить каждый элемент к результату, а затем умножить результат на десять, чтобы установить величины.

Или вы можете добавить значение каждого элемента * 10 ^ (count-index); где count - количество элементов в ArrayList.

0 голосов
/ 02 июня 2009
int i = mylist
  .OfType<int>()
  .Aggregate( (soFar, next) => soFar*10 + next);

Ну, в любом случае это будет работать в C #.

0 голосов
/ 02 июня 2009

Не зная, какой язык вы хотите, я думаю, что ваш лучший подход - найти сумму 1000000 + 400000 + 60000 + 7000 + 800 + 30 + 8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...