2

2次元配列に「params」修飾子を使用するC#メソッドがあります。

/// <summary>
///   Combine vectors horizontally.
/// </summary>
/// 
public static T[] Concatenate<T>(params T[][] vectors)
{
    int size = 0;
    for (int i = 0; i < vectors.Length; i++)
        size += vectors[i].Length;

    T[] r = new T[size];

    int c = 0;
    for (int i = 0; i < vectors.Length; i++)
        for (int j = 0; j < vectors[i].Length; j++)
            r[c++] = vectors[i][j];

    return r;
}

私はそれを次のようにJavaに変換します:

{
    int size = 0;
    for (int i = 0; i < vectors.length; i++)
    {
        size += vectors[i].;
    }

    T[] r =(T[]) Array.newInstance(vectors[0][0].getClass(), size);

    int c = 0;
    for (int i = 0; i < vectors.length; i++)
    {
        for (int j = 0; j < vectors[i].length; j++)
        {
                r[c++] = vectors[i][j];
        }
    }

    return r;
}

しかし、それは間違っているようです。ソリューションが機能しません。誰かが正しい方法を教えてください。どうもありがとう。

4

2 に答える 2

2

Javaでは、ここで説明されているように、...の代わりにを使用しますparams

したがって、メソッドを次のように宣言します([]が1つ失われることに注意してください)。

public static T[] Concatenate<T>(T[]...vectors)
于 2012-06-10T13:52:41.877 に答える
0

いくつかの提案:

  • 配列とジェネリックスを一緒に使用することは避けてください。タイプearasureのおかげで、それらは一緒にうまく機能しません。(CLRではその問題はありません。)

  • 既存のソリューションを優先します。グアバIterables.concatはここの法案に合うようです。

于 2012-06-10T13:55:37.460 に答える