gpt4 book ai didi

c# - 在c#中初始化多维对象数组

转载 作者:行者123 更新时间:2023-12-01 22:27:10 24 4
gpt4 key购买 nike

我只是想知道,有没有更好的方法来初始化c#多维对象数组(引用类型)。

这是我的代码:

Board = new Field[BoardHeight, BoardWidth];

for (int i = 0; i < BoardHeight; i++)
{
for (int j = 0; j < BoardWidth; j++)
{
Board[i, j] = new Field();
}
}

我是否可以摆脱 for/for 循环并将其替换为单行?那太好了。

最佳答案

嵌套的 for 循环通常是最易读/最可接受的初始化二维数组的方法。

如果您确实需要单个语句 - 一种选择是使用 Enumerable.Aggregate(在单个语句中创建/填充数组)和 Enumerable.Range + Enumerable.SelectMany(使用 How do I take the Cartesian join of two lists in c#? 创建索引):

 Board = Enumerable.Range(0, BoardHeight)
.SelectMany(x => Enumerable.Range(0, BoardWidth), (row,col)=>new {row,col})
.Aggregate(new Field[BoardHeight, BoardWidth],
(board, position)=>
{
board[position.row,position.col] = new Field();
return board;
});

(这段代码的可读性有待讨论)

更实用的解决方案:

for (var i = 0; i < BoardHeight* BoardWidth; i++) 
{
Board[i / BoardWidth, i % BoardWidth] = new Field();
}

如果您确实需要“单行初始化”- 将嵌套的 for 循环重构为方法(可能是通用的)并使用“单行”在任何您想要的地方调用它。像这样的东西:

   public TField[,] InitializeArray<TField>(
int BoardHeight, int BoardWidth) where TField:new()
{
var Board = new TField[BoardHeight, BoardWidth];

for (int i = 0; i < BoardHeight; i++)
{
for (int j = 0; j < BoardWidth; j++)
{
Board[i, j] = new TField();
}
}
return Board;
}

关于c# - 在c#中初始化多维对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com