对于上一个问题感到抱歉,但我很困惑并且强调:S。
我在R中有这个功能:
shift <- function(d, k) rbind( tail(d,k), head(d,-k), deparse.level = 0 )
和这个数据框:
A B value
1 1 0.123
2 1 0.213
3 1 0.543
1 2 0.313
2 2 0.123
3 2 0.412
此函数将此数据帧转换为(在k = 1的情况下):
A B value
3 2 0.412
1 1 0.123
2 1 0.213
3 1 0.543
1 2 0.313
2 2 0.123
代码:
string[] data = File.ReadAllLines("test.txt");
decimal[,] numbers = new decimal[data.Length, 3];
for(int x = 0; x < data.Length; x++)
{
string[] temp = data[x].Split(' ');
for(int y = 1; y < temp.Length; y++)
{
numbers[x,y] = Convert.ToDecimal(temp[y]);
}
}
这是我用于从文本文件中获取值的代码,但我想创建将旋转此表的函数。
我想为Java或C#中的文本文件创建相同的函数。
如何做到这一点?
我将数据存储在C#中的2D数组中:decimal[,]
你的功能会像上一个例子一样旋转它们,我想要做的是:
我有这张桌子:
A B value
1 1 0.123
2 1 0.213
3 1 0.543
1 2 0.313
2 2 0.123
3 2 0.412
我希望它成为(如果换班次2):
A B value 3 1 0.543 1 2 0.313 2 2 0.123 3 2 0.412 1 1 0.123 2 1 0.213
答案 0 :(得分:3)
我认为这会做你想要的,但我必须承认我对C#并不熟悉,所以我希望有更多的惯用形式,循环更少:
static decimal[,] Rotate(decimal[,] input, int k)
{
int m = input.GetLength(0);
int n = input.GetLength(1);
decimal[,] result = new decimal[m, n];
for (int i=0; i<m; i++)
{
int p = (i + k) % m;
if (p < 0)
p += m;
for (int j=0; j<n; j++)
result[p, j] = input[i, j];
return result;
}
关于您的更新,通过传递k
的负值来处理。对于您的示例,请传递k=-2
。