【问题标题】:Converting a 2d array to a 1d List, then back to a 2d array将二维数组转换为一维列表,然后再转换回二维数组
【发布时间】:2022-01-15 13:07:54
【问题描述】:

为了序列化一个二维数组,我首先将其展平,如下所示:

InfoCell[,] cells = new InfoCell[size, size];
List<InfoCell> flattenedCells= new List<InfoCell>();

foreach(InfoCell infoCell in cells )
{
    flattenedCells.Add(infoCell);
}

知道二维数组的大小,如何将这个一维列表转换回二维数组?

【问题讨论】:

  • 我不认为我理解这个问题。 -- 分配另一个二维数组并循环?
  • 问题是如何将这个一维列表转换回二维数组。我在退出会话时保存 1d 列表(因为我无法序列化 2d 数组),当我重新加载时,我想使用 1d 列表填充 2d 数组。
  • 你需要一些关于如何将 1d 转换回 2d 的逻辑......真的取决于你的结构。您的初始二维数组是否总是方阵? AKA 按大小计算?
  • 序列化成什么?转换 1 2 维并不是你真正的问题。
  • 如果是这样,并且你知道你的长度是一个平方长度......然后你可以计算出你的二维数组的维度, - 以及一维数组的每个“大小”条目数, -- 这是二维数组的 1 行或 1 列

标签: c# arrays


【解决方案1】:

你可以试试这样的:

var array = new string[rowsSize, columnSize];
var list = new List<string>();
for (var i = 0; i < rowsSize; i++)
{
   for (var j = 0; j < columnSize; j++)
   {
      list.Add(array[i,j]);
   }   
}

var newArray = new string[rowsSize, columnSize];
for (var i = 0; i < rowsSize; i++)
{
   for (var j = 0; j < columnSize; j++)
   {
       var index = i * columnSize + j;
       newArray[i, j] = list[index];
   }   
}
        

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 2016-02-18
    • 2018-02-19
    • 2019-01-23
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多