Работа с разными колекциями - C#
Формулировка задачи:
Строю по задачке модель магазина. В классе "Store" метод "sell_product" нужно сделать по принципу:
1. Берем первого клиента из очереди "queue".
2. Залазим в его список покупок "shopping_list ", берем первый. По имени товара проверяем есть ли товар на складе магазина "products_list".
3. Проверяем хватает ли товара на складе "quantity". Пример: у клиента в списке - "морковка 10 шт." а на складе есть только 5 шт.
4. Проверяем хватит ли у клиента денег "money" на покупку. (price * quantity).
5. Продаем товар, идем дальше по списку покупок.
У меня возникли проблемы с этими коллекциями.
У них нет индексирования. В одном foreach нельзя получить ссылки на объекты сразу 2-х коллекций.
Не получается одновременно доступатся до полей 2-х объектов разных коллекций, чтобы проводить поиск из пункта 2 и проверку полей из пункта 3.
У коллекции SortedSet есть метод Contains(), но он не возвращает объект который нашел. Нужно писать поиск в ручную? или найдется решение по изящнее?
Подскажите как это сделать.
class Store
{
SortedSet<Product> products_list;//товары на складе
Queue<Client> queue; //Очередь
public void sell_product()
{
var buyer = queue.Dequeue();
foreach (var i in buyer.shopping_list)
{
}
}
}
class Product
{
public string name { get; }
public double purchase_price { get; }
public uint quantity { get; }
}
class Client
{
public Stack<Product> shopping_list { get; } //Список покупок
public double money { get; }
}Решение задачи: «Работа с разными колекциями»
textual
Листинг программы
public void sell_product()
{
var buyer = queue.Dequeue();
foreach (var i in buyer.Shopping_list)
{
IEnumerable<Products> seling = products_list.Where(n => n.Name == i.Name);
if (seling.ElementAt(0).Quantity < i.Quantity)
Console.WriteLine("Товар " + seling.ElementAt(0).Name + ": Нет достаточного количества на складе");
else if (seling.ElementAt(0).Purchase_price * i.Quantity > buyer.Money)
Console.WriteLine("Недостаточно денег");
else
Console.WriteLine("Товар продан");
}
}