用另一种语言创建相同的功能

时间:2011-06-19 11:45:08

标签: c# java r

对于上一个问题感到抱歉,但我很困惑并且强调: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

1 个答案:

答案 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