我发起了一个多维数组:
private byte[,] grid = new byte[9, 9];
对于具有现有网格的每个单元格,我想保留带有一些值的字节列表。
我知道三维数组在这里很方便。但由于具有无效值的列表是动态的,我想使用List而不是数组。
修改:在此处提供一些背景信息。我正在制作一个由多维数组表示的数独游戏。由于我想以编程方式解决数独并且我使用回溯算法,我需要记住每个单元格无效的数字。
因此每个单元格应包含一个值和一个List。我可能只是将实际字段作为列表中的第一个值。但永远不知道是否有一个真正的清洁解决方案:)
答案 0 :(得分:1)
var grid = new List<byte>[9,9];
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
grid[i, j] = new List<byte>();
之后,9x9数组的每个项目都包含空List<byte>
。
但是,我建议创建一个类Field
public class Field
{
public byte Value { get; set; }
public List<byte> List { get; set; }
public Field()
{
List = new List<byte>();
}
}
并使用它而不仅仅是List<byte>
:
var grid = new Field[9, 9];
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
grid[i, j] = new Field();
答案 1 :(得分:0)
如果我理解正确,你需要一个列表中的字节列表? 试试这个:
List<List<byte>> listOfBytesInList = new List<List<byte>>();
<强>更新强>
您可以实现一个使用内部字节列表的自己的类。 我太迟了,但无论如何我都会发布我的解决方案。
public class ByteFieldList
{
private readonly List<byte> _interalBytes;
public ByteFieldList()
: this(4, 0)
{
}
public ByteFieldList(byte fieldValue)
: this(4, fieldValue)
{
}
public ByteFieldList(int capacity, byte fieldValue)
{
FieldValue = fieldValue;
_interalBytes = new List<byte>(capacity);
}
public byte FieldValue { get; set; }
public ByteFieldList Add(byte b)
{
_interalBytes.Add(b);
return this;
}
public void AddRange(byte[] bytes)
{
foreach (var b in bytes)
Add(b);
}
public ByteFieldList Remove(byte b)
{
_interalBytes.Remove(b);
return this;
}
public byte this[int index]
{
get { return _interalBytes[index]; }
}
public byte[] GetAllInvalid()
{
return _interalBytes.ToArray();
}
}
public void Usage()
{
ByteFieldList byteFieldList = new ByteFieldList(5);
byteFieldList.Add(5).Add(4).Add(8);
byteFieldList.AddRange(new byte[] { 7, 89, 4, 32, 1 });
var invalids = byteFieldList.GetAllInvalid(); // get 5, 4, 8, 7, 89, 4, 32, 1
byteFieldList.FieldValue = 4;
}