2009-06-02 15 views
4

Что было бы самым простым способом преобразования ArrayList из целых чисел в один int, а первое целое в списке было 1-м номером в int и т. Д. В Java?ArrayList из целых чисел в один int?

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

+0

Любой конкретный язык? – dsteele

+0

Ничего себе, этот вопрос получил как 10 ответов сразу. –

+1

Предполагается, что поведение должно быть указано в таких случаях, как Список list = Arrays.asList (5,6,7,8,9,10,11,12,13,14,15,16,17); ? –

ответ

4

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

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

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

5

Примечание: проще всего не всегда наиболее эффективно. это в 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); 

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

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 не был использован для простоты, потому что это выглядит как домашнее задание.

+0

большое вам спасибо! очень полезно, извините за действительно основной вопрос, хотя – 2009-06-02 17:26:32

+0

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

+0

принял ответ, потому что однажды я спросил и начал смотреть на ответы, я понял, что я уже знал, что это то, что я пытался сделать ... и это в java, чего я хотел, но (oops) забыл сказать во-первых! – 2009-06-02 17:34:52

1

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

int runningtotal = 0; 
foreach(int i in myList) { 
    runningtotal *= 10; 
    runningtotal += i; 
} 
return runningtotal; 
0
int result = 0; 
for(int i=list.Count - 1;i>=0;--i) 
{ 
    result += list[i] * (int)(Math.Pow((double)10, (double)(list.Count - 1 - i))); 
} 

Также не будет работать с отрицательными числами ... вы могли бы использовать Math.abs(), чтобы справиться с этим.

0

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

-1
int i = mylist 
    .OfType<int>() 
    .Aggregate((soFar, next) => soFar*10 + next); 

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

0

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

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

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

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

15

Самый простой способ в 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

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

+0

Это лучшее из ответов Java. Для меня преобразование в строку, а затем преобразование обратно в целое число не только неэффективно, но и свернуто. –

+0

Если честно, на Java, если вы не заботитесь об эффективности, это не так уж плохо, поскольку все преобразования выполняются с помощью собственного кода. Хотя я определенно признаю, что это не лучший способ сделать это. –

+2

Это ломается с любым целым числом в списке> 9. Я не видел этого ограничения в вопросе, но тот факт, что OP, отмеченный вами как можно лучше, указывает, что все целые числа в списке гарантированы <= 9. – mkb

0

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

я = INT ("" .join ([ул (г) при г в х]))

+0

Упс, это было до того, как вы указали язык. Вы сказали ArrayList, поэтому я предположил Java, но я просто так люблю Python. – Robbie

+0

все в порядке :-) если я когда-нибудь напишу что-нибудь в Python, я запомню его – 2009-06-02 17:53:40

0

В Haskell,

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

Добавлено перед вопросом задан язык. –

+0

Также, будучи более кратким, Haskell можно свести к foldl ((+). (*) 10) 0 –

0

Другое решение, Это будет принимать число> 9

List<Integer> list = 
int num = Integer.parseInt(list.toString().replaceAll("\\D","")); 
Смежные вопросы