2

我有一个 C# 方法,它对二维数组使用“params”修饰符。

/// <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所述

所以你像这样声明你的方法(注意丢失一个[]):

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

几个建议:

  • 只是避免一起使用数组和泛型。多亏了type earasure,他们在一起玩得不好。(你在 CLR 上没有这个问题。)

  • 更喜欢现有的解决方案。番石榴Iterables.concat似乎符合这里的要求。

于 2012-06-10T13:55:37.460 回答