Как лучше организовать список покупок

Правильно ли я понимаю, что чтобы создать приложение типа "список покупок" или подобное с набором одинаковых форм с набором одинаковых полей данных, нужно:

  1. Нужно создать класс "Лист" с полями данных одного листа списка.

  2. Создать массив экземпляров класса "лист".

  3. Ну и работать с этими экземплярами.

Или есть другие, более удобные способы организации такого списка?

(язык Kotlin, Swift, Rust)


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

Автор решения: Damir Hakimof

Добро пожаловать на Stack Overflow!

Твой вопрос не очень корректен, из-за чего я мог неправильно сформулировать свое решение, но вот что могу предложить на Rust:

#[derive(Debug)]
struct Item {   //  Твой "Лист" в вопросе
    name: String,
    quantity: u32,
    category: String,
    // Можно еще что-то добавить
}

/*
impl Item {...}
*/

struct ShoppingList {   // Твой массив, хотя это динамический массив - вектор
    items: Vec<Item>,
}

impl ShoppingList {
    fn new() -> ShoppingList {  // Создание списка покупок
        ShoppingList { items: Vec::new() } // Он пустой изначально
    }

    fn add_item(&mut self, item: Item) {  // Добавить в список значение
        self.items.push(item);
    }

    fn remove_item(&mut self, name: &str) {  // Удалить из списка значение
        if let Some(index) = self.items.iter().position(|item| item.name == name) {
            self.items.remove(index);
        }
    }  // Если в списке нет такого продукта, то мы просто игнорируем это, можешь добавить обработку ошибок

    fn display_list(&self) {  // IO-формат вывода содержимого списка
        if self.items.is_empty() {
            println!("Shopping list is empty.");
        } else {
            println!("Shopping List:");
            for item in &self.items {
                println!("{:?}", item);
            }
        }
    }
}

fn main() {
    let mut shopping_list = ShoppingList::new();

    shopping_list.add_item(Item {
        name: String::from("Milk"),
        quantity: 2,
        category: String::from("Dairy"),
    });

    shopping_list.add_item(Item {
        name: String::from("Bread"),
        quantity: 1,
        category: String::from("Grains"),
    });

    shopping_list.display_list();

    shopping_list.remove_item("Milk");

    shopping_list.display_list();
}
→ Ссылка