用另一种语言创建相同的函数
本文关键字:函数 创建 另一种 语言 | 更新日期: 2023-09-27 17:59:39
很抱歉之前的问题,但我很困惑,压力很大: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
我认为这会达到你想要的效果,但我必须承认,我对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
。