6

Integer の ArrayList を 1 つの int に変換する最も簡単な方法は何でしょうか。リストの最初の Integer は int の最初の数値などです。Java で?

たとえば、整数の ArrayList: 1 4 6 7 8 3 8
は int 値 1467838 になります。

4

10 に答える 10

19

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

これが正解です。

于 2009-06-02T17:27:59.393 に答える
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);

編集: コメントでこれに注目しているすべての人を喜ばせるために、効率が本当に心配であるが、何らかの理由でこの文字列メソッドを使用したい場合は、次のようにする必要があります。

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 を使用しませんでした。これは宿題のように見えるからです。

于 2009-06-02T17:21:36.190 に答える
4

C# (指定しなかった:-) を想定していますが、一般的なアルゴリズムは必要な言語で動作します。

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

明らかに、コードは、結果の数値が int で表現できるほど小さいこと、および ArrayList 内の各項目が 0 から 9 までの範囲にあることを前提としています。

于 2009-06-02T17:21:30.730 に答える
1

20 億程度までの数値のみを処理します。より大きな数が必要な場合は、long、long long、またはお気に入りの bigint クラスを使用します。すべてが負でない限り、負の数では機能しません。

int runningtotal = 0;
foreach(int i in myList) {
    runningtotal *= 10;
    runningtotal += i;
}
return runningtotal;
于 2009-06-02T17:22:14.707 に答える
1

別の解決策、これは9より大きい数字を受け入れます

List<Integer> list = 
int num = Integer.parseInt(list.toString().replaceAll("\\D",""));
于 2009-07-15T17:59:23.833 に答える
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​​()を使用してそれを処理できます。

于 2009-06-02T17:22:56.313 に答える
0

どの言語が必要かわからない場合、最善のアプローチは1000000 + 400000 + 60000 + 7000 + 800 + 30+8の合計を見つけることだと思います。

于 2009-06-02T17:23:17.777 に答える
0

あなたの質問から、ArrayListのインデックス0が最も重要な値であると想定しています。あなたの例は、最初の数が1,000,000に相当することを示しています。

それらを文字として扱い、それらを連結してから、整数に解析して戻すことができます。

または、各項目を結果に追加してから、結果に10を掛けて、大きさを設定することもできます。

または、各要素の値を追加できます* 10 ^(count-index); ここで、countはArrayList内の要素の数です。

于 2009-06-02T17:26:07.790 に答える
0

Pythonで!楽しみのためだけに:

i = int( "" .join([str(z)for z in x]))

于 2009-06-02T17:28:00.503 に答える
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)
于 2009-06-02T17:34:41.227 に答える