我遇到了一个列表问题,因为我需要创建一个二维列表,在其中可以通过给出列和行来读取数据,因此可以使用my_List[col][row]
从列表中读取数据,因此可以这样制作2D列表吗?
这会对性能产生多大的影响?我应该意识到可能会对代码产生性能影响的任何内容?我可能需要每秒从2D列表中读取几百次
是否有可能具有更多的网格类型2D列表,所以如果我在3、4和5中有数据,但是在0、1和2中没有任何数据,则将其视为坐标。所以我可以使用myList[3][5]
从列表中读取数据并从那里获得0、1和2都没有的数据吗?还是我需要遍历它并在其中添加诸如null的内容?
提前谢谢!
答案 0 :(得分:1)
您可以像这样创建2D数组:
string[,] twoDArray = new string[2,2];
然后您可以像这样遍历它:
for (int i = 0; i < twoDArray.Length; i++)
{
foreach (int j in twoDArray[i,0])
{
}
}
您还可以像这样创建2D列表:
List<List<string>> grid = new List<List<string>>();
并使用枚举器(例如for循环)遍历它们:
var enu = grid.GetEnumerator();
while (enu.MoveNext())
{
for(int i = 0; i < enu.Current.Count; i++)
{
enu.Current.RemoveAt(i);
}
}
基本上,您要遍历所有列表,然后遍历每个列表,只要它的大小即可。在for循环中,您可以按照自己喜欢的任何方式更改封装列表。
答案 1 :(得分:1)
是的,您确实可以使用multidimensional arrays or jagged arrays来存储“ 2D数据”。
对于创建不使用任何内存空间用于未使用索引的数据结构,一种选择是使用字典,其中键是两个数字的元组,例如这样(假设您的数据是字符串):< / p>
var items = new Dictionary<(int, int), string>();
items.Add((0,1), "0-1"); //this throws an error if the key already exists
items[(2,3)] = "2-3"; //this silently replaces the value if the key already exists
Console.WriteLine(items.Keys.Contains((0,1))); //true
Console.WriteLine(items.Keys.Contains((0,2))); //false
Console.WriteLine(items[(2,3)]); //"2-3"
当然,您可能希望将此功能封装在自己的类中,但是您明白了。
但是请注意,这种字典方法在性能方面可能会比普通数组差,但您可以尝试并收集一些指标。