如何更改特定维度的二维数组中所有数字的符号?
我有例如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 )
{
}
答案 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 Expressions和Enumerable Extension Methods是转换,过滤,排序,加入,汇总,分组和投放数据的强大工具。