用另一种语言创建相同的函数

本文关键字:函数 创建 另一种 语言 | 更新日期: 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