如何在数组中设置列表
本文关键字:设置 列表 数组 | 更新日期: 2023-09-27 18:03:15
我启动了一个多维数组:
private byte[,] grid = new byte[9, 9];
我想持有一个字节列表与一些值,为现有网格中的每个单元格。
我知道三维数组在这里会很方便。但是,由于具有无效值的列表是动态的,所以我想使用list而不是数组。
Edit:在这里给出一些上下文。我在做一个数独游戏,它由一个多维数组表示。由于我想以编程方式解决数独,并且我正在使用回溯算法,因此我需要记住每个单元格无效的数字。
所以每个单元格应该由一个value和一个List组成。我可以把实际字段作为列表的第一个值。但永远不知道是否有一个真正干净的解决方案:)
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();
如果我理解正确,你需要一个列表中的字节列表吗?试试这个:
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;
}