更改特定维度的二维数组中所有值的符号

时间:2016-06-05 06:53:10

标签: c# arrays

如何更改特定维度的二维数组中所有数字的符号?

我有例如object[,],其中包含值,例如

[0,1]
[0,2]
[0,3]

我想更改第二维中所有值的符号以获取

[0,-1]
[0,-2]
[0,-3]

使用少量代码有效地执行此操作的方法是什么?

我开始考虑foreach每个项目,但我已经在这里丢失了

object[,] values = new object[1, 100];
foreach (object[,] v in values )
    {

    }

2 个答案:

答案 0 :(得分:1)

这是一种方法:

object[,] values = new object[1,10];

for (var i = 0; i < values.GetLength(0);i++) 
{
    for (var j = 0; j < values.GetLength(1); j++)
    {
        var obj = values[i, j];
        int intVal;
        if (obj != null && int.TryParse(obj.ToString(), out intVal))
        {
            values[i, j] = -1 * intVal;
        }
    }
}

但是,如果您使用一组int,您的代码将如下所示:

int[,] values = new int[1, 10];

for (var i = 0; i < values.GetLength(0); i++)
{
    for (var j = 0; j < values.GetLength(1); j++)
    {
            values[i, j] = -1 * values[i, j];
    }
}

答案 1 :(得分:0)

二维对象数组object[,]是否是一项要求,或者您是否可以更容易地使用int[][]结构来表示您的数据?类似的东西:

int[][] matrix = new[]
{
    new[] {0, 1, 2},
    new[] {0, 2, 4},
    new[] {0, 3, 9}
};

然后你可以像这样创建你想要的变换:

int columnToFlip = 1;
IEnumerable<IEnumerable<int>> flipped = matrix.Select(row => row.Select((value, index) => index == columnToFlip ? -value : value));

或者,如果您需要int[][]数组中的结果,那么:

int[][] flippedMatrix = matrix.Select(row => row.Select((value, index) => index == columnToFlip  ? -value : value).ToArray()).ToArray();

C#Lambda ExpressionsEnumerable Extension Methods是转换,过滤,排序,加入,汇总,分组和投放数据的强大工具。