Я столкнулся с проблемой со списками, так как мне нужно создать двумерный список, в котором я могу читать данные, предоставляя столбцы и строки, чтобы я мог читать из своего списка, используя my_List[col][row]
так что это так можно ли сделать 2D список таким образом?
Насколько это может повлиять на производительность и что я должен знать, что может повлиять на производительность кода? Возможно, мне придется читать несколько сотен раз в секунду из моего списка 2D
Можно ли иметь 2D-список с большим типом сетки, поэтому, если у меня есть данные в 3, 4 и 5, но у меня нет ничего в 0, 1 и 2, думайте об этом как о координатах. поэтому я могу читать из списка, используя myList[3][5]
и получать оттуда данные, где 0, 1 и 2 не имеют ничего? или мне нужно перебрать его и добавить что-то там, как ноль?
заранее спасибо!
Да, вы действительно можете использовать многомерные массивы или зубчатые массивы для хранения "2D данных".
Что касается создания структуры данных, которая не использует пространство памяти для неиспользуемых индексов, можно использовать словарь, в котором ключи представляют собой кортежи из двух чисел, например, (при условии, что ваши данные являются строками):
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"
Конечно, вы, вероятно, хотите инкапсулировать эту функциональность в своем собственном классе, но вы поняли идею.
Однако обратите внимание, что этот словарный подход, вероятно, будет хуже, чем простой массив с точки зрения производительности, но вы должны экспериментировать и собирать некоторые метрики.
Вы можете создать 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>>();
и перебрать их, используя Enumerator и, например, цикл for:
var enu = grid.GetEnumerator();
while (enu.MoveNext())
{
for(int i = 0; i < enu.Current.Count; i++)
{
enu.Current.RemoveAt(i);
}
}