Как сделать массив списков в си шарп

Пишу маленький проект(учусь) мини-магазин в консоли. И я хочу сделать массив списков чтобы, если пользователь напишет phone, то у него выводилось все бренды. Как мне соединить массив и список, скажите пожалуйста. Массив выглядит так:

string[] sortProduct = { "phone", "fridge", "washing machine" };

Ответы (2 шт):

Автор решения: Faraday

Давайте сначала разберёмся, что это за тип данных такой массив. К сведению, не берём массив обычных типов данных, а так же их размещение в памяти, механизм обращения к элементам и т.д.

Массив некого типа данных вы можете указать как 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);
    }
}

Так же вы можете использовать, для решения подобных задач, за надобности, не только список внутри массива (массив списков), а ещё и массив массивов

→ Ссылка
Автор решения: Aziz Umarov

Чтобы реализовать эту логику, можно использовать словарь (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) убеждается, что введенная категория существует в словаре.
  • Если категория найдена, выводится список брендов для этой категории.

Такой подход поможет легко добавлять новые категории и бренды.

→ Ссылка