Как сделать массив списков в си шарп
Пишу маленький проект(учусь) мини-магазин в консоли. И я хочу сделать массив списков чтобы, если пользователь напишет phone, то у него выводилось все бренды. Как мне соединить массив и список, скажите пожалуйста. Массив выглядит так:
string[] sortProduct = { "phone", "fridge", "washing machine" };
Ответы (2 шт):
Давайте сначала разберёмся, что это за тип данных такой массив. К сведению, не берём массив обычных типов данных, а так же их размещение в памяти, механизм обращения к элементам и т.д.
Массив некого типа данных вы можете указать как T[]
, где T
используемый тип данных. Несколько базовых примеров:
string[]
который вы уже используетеint[]
char[]
bool[]
Подобные записи обозначают, что каждый элемент массив будет иметь соответствующий тип T
:
T[] t = { t1, t2, t3, tN };
Как же сделать массив их список или массив массивов? Сначала массив списков. Для этого вы должны указать, что тип, хранимый в массив буде списком List<T>
, где T
используемый тип данных:
List<string>[] strs = new List<string>[length];
Где length
начальная ёмкость массива.
Такой массив имеет развёрнутый вид подобно этому:
[
{ "string", "string", "string", "string", ... },
{ "string", "string", "string", "string", ... }
{ "string", "string", "string", "string", ... }
]
Где []
обозначают массив, а { }
список. Для начала нужно объявить такой массив списков:
List<string>[] products = new List<string>[10];
Далее, для заполнения обращаемся последовательно к каждому элементу массива. Стоит отметить, что каждым элементом массива будет отдельный список. Для начала его нужно инициализировать:
products[0] = new List<string>();
Для примера, мы представим, что в элементе с индексом 0
будут храниться телефоны. Теперь, после инициализации самого списка добавим туда телефоны:
products[0].Add("IPhone");
products[0].Add("Samsung");
products[0].Add("Honor");
products[0].Add("Xiaomi");
products[0].Add("Siemens");
products[0].Add("Motorolla");
Далее, по аналогии заполняем следующие элементы массива:
products[1].Add("fridge 1");
products[1].Add("fridge 2");
products[1].Add("fridge 3");
products[1].Add("fridge 4");
products[1].Add("fridge 5");
products[1].Add("fridge 6");
Ну и для вывода этого всего дела на экран можем воспользоваться следующей конструкцией (Типы циклов взяты для примера обхода массива и коллекции/списка. Вы можете использовать тот, который вам удобно):
for (int i = 0; i < products.Length; i++)
{
foreach (string brandModel in products[i])
{
Console.WriteLine(brandModel);
}
}
Так же вы можете использовать, для решения подобных задач, за надобности, не только список внутри массива (массив списков), а ещё и массив массивов
Чтобы реализовать эту логику, можно использовать словарь (Dictionary), где ключами будут значения из sortProduct
, а значениями — списки брендов для каждого типа товара.
Пример кода:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Создаем массив категорий товаров
string[] sortProduct = { "phone", "fridge", "washing machine" };
// Создаем словарь, где ключ - название категории, а значение - список брендов
Dictionary<string, List<string>> productBrands = new Dictionary<string, List<string>>
{
{ "phone", new List<string> { "Apple", "Samsung", "Xiaomi" } },
{ "fridge", new List<string> { "LG", "Samsung", "Bosch" } },
{ "washing machine", new List<string> { "Whirlpool", "Bosch", "LG" } }
};
Console.Write("Введите категорию товара: ");
string input = Console.ReadLine();
// Проверяем, есть ли введенная категория в словаре
if (productBrands.ContainsKey(input))
{
Console.WriteLine("Доступные бренды:");
foreach (string brand in productBrands[input])
{
Console.WriteLine("- " + brand);
}
}
else
{
Console.WriteLine("Категория не найдена.");
}
}
}
Здесь:
- Используется
Dictionary
для сопоставления категории товара с брендами. - Проверка
productBrands.ContainsKey(input)
убеждается, что введенная категория существует в словаре. - Если категория найдена, выводится список брендов для этой категории.
Такой подход поможет легко добавлять новые категории и бренды.