我有一个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;
}
但这似乎是错误的。解决方案不起作用。 请有人告诉我正确的方法。 非常感谢。
答案 0 :(得分:2)
在Java中,您使用...
代替params
,正如here所述
所以你声明你的方法是这样的(注意丢失一个[]):
public static T[] Concatenate<T>(T[]...vectors)
答案 1 :(得分:0)
一些建议:
避免一起使用数组和泛型。由于类型earasure,他们不能很好地一起玩。 (你在CLR上没有这个问题。)
首选现有解决方案。番石榴Iterables.concat
似乎适合这里的账单。