Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التحقق من وجود عناصر في المجموعة

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 20 من 65.

عند العمل مع Set، ستحتاج بشكل متكرر إلى التحقق مما إذا كان عنصر معين موجوداً في المجموعة. توفر الطريقة contains() طريقة بسيطة وفعالة لإجراء هذا التحقق، حيث تعيد true إذا تم العثور على العنصر و false إذا لم يتم العثور عليه.

تعد إحدى المزايا الرئيسية لاستخدام contains() مع Set هي أداؤه الاستثنائي. فخلافاً للبحث عبر List حيث قد يلزم فحص كل عنصر واحداً تلو الآخر، تم تحسين عمليات Set لعمليات البحث السريعة، مما يجعل contains() فعالاً للغاية حتى مع المجموعات الكبيرة.

Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};

// التحقق مما إذا كانت مكونات معينة متوفرة
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');

print(hasFlour);  // true
print(hasMilk);   // false

تُعد هذه الطريقة مفيدة بشكل خاص عندما تحتاج إلى التحقق من صحة البيانات، أو التحقق من المتطلبات المسبقة، أو تصفية المعلومات بناءً على العضوية في مجموعة محددة. تجعلها النتيجة المنطقية (boolean) مثالية للاستخدام في الجمل الشرطية والعمليات المنطقية.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير نظام التحقق من الوصفات من خلال التأكد من توفر مكونات معينة في خزانة المطبخ. يجب على برنامجك القيام بما يلي:

  1. قراءة مدخل نصي (string) يمثل اسم الوصفة
  2. قراءة مدخلات نصية متعددة تمثل المكونات المتوفرة في الخزانة (سينتهي الإدخال عندما تتلقى "pantry_done")
  3. قراءة مدخلات نصية متعددة تمثل المكونات المطلوبة للوصفة (سينتهي الإدخال عندما تتلقى "recipe_done")
  4. إنشاء Set تحتوي على المكونات المتوفرة في الخزانة
  5. استخدام التابع contains() للتحقق مما إذا كان كل مكون مطلوب متوفراً في الخزانة
  6. طباعة نتائج التحقق من الوصفة بالتنسيق الدقيق الموضح أدناه

على سبيل المثال، إذا كان اسم الوصفة هو "Chocolate Chip Cookies"، وكانت مكونات الخزانة هي "flour"، "sugar"، "eggs"، "butter"، "vanilla"، والمكونات المطلوبة هي "flour"، "sugar"، "chocolate chips"، "butter"، فيجب أن يخرج برنامجك ما يلي:

Recipe: Chocolate Chip Cookies
Pantry ingredients: {flour, sugar, eggs, butter, vanilla}
Required ingredients: [flour, sugar, chocolate chips, butter]
Checking ingredient availability:
- flour: Available
- sugar: Available
- chocolate chips: Missing
- butter: Available
Missing ingredients: [chocolate chips]
Status: Cannot make recipe - missing 1 ingredient(s)

إذا كان اسم الوصفة هو "Scrambled Eggs"، وكانت مكونات الخزانة هي "eggs"، "butter"، "salt"، "pepper"، والمكونات المطلوبة هي "eggs"، "butter"، "salt"، فيجب أن يخرج برنامجك ما يلي:

Recipe: Scrambled Eggs
Pantry ingredients: {eggs, butter, salt, pepper}
Required ingredients: [eggs, butter, salt]
Checking ingredient availability:
- eggs: Available
- butter: Available
- salt: Available
Missing ingredients: []
Status: Ready to cook - all ingredients available

إذا كان اسم الوصفة هو "Fruit Salad"، وكانت مكونات الخزانة هي "apples"، "bananas"، والمكونات المطلوبة هي "apples"، "oranges"، "grapes"، "honey"، فيجب أن يخرج برنامجك ما يلي:

Recipe: Fruit Salad
Pantry ingredients: {apples, bananas}
Required ingredients: [apples, oranges, grapes, honey]
Checking ingredient availability:
- apples: Available
- oranges: Missing
- grapes: Missing
- honey: Missing
Missing ingredients: [oranges, grapes, honey]
Status: Cannot make recipe - missing 3 ingredient(s)

يجب أن يستخدم برنامجك التابع contains() للتحقق من كل مكون مطلوب مقابل الـ Set الخاصة بالخزانة. قم بتخزين المكونات المطلوبة في قائمة (list) للحفاظ على ترتيب التحقق، واجمع أي مكونات مفقودة في قائمة منفصلة. إذا كانت جميع المكونات متوفرة، فاعرض "Ready to cook - all ingredients available" كحالة (status). إذا كان هناك أي مكونات مفقودة، فاعرض "Cannot make recipe - missing X ingredient(s)" حيث X هو عدد المكونات المفقودة.

ورقة مرجعية

استخدم التابع contains() للتحقق مما إذا كان عنصر معين موجوداً في Set. يعيد القيمة true إذا تم العثور على العنصر و false إذا لم يتم العثور عليه:

Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};

bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');

print(hasFlour);  // true
print(hasMilk);   // false

يُعد التابع contains() عالي الكفاءة مع مجموعات Set، مما يجعله مثالياً لعمليات البحث السريعة حتى مع مجموعات البيانات الكبيرة. وهو مفيد بشكل خاص للتحقق من الصحة، والتحقق من المتطلبات المسبقة، والعمليات الشرطية.

جرّب بنفسك

import 'dart:io';

void main() {
  // قراءة اسم الوصفة
  String? recipeName = stdin.readLineSync();
  
  // قراءة مكونات المؤونة حتى "pantry_done"
  Set<String> pantryIngredients = <String>{};
  String? pantryInput;
  while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
    if (pantryInput != null) {
      pantryIngredients.add(pantryInput);
    }
  }
  
  // قراءة المكونات المطلوبة حتى "recipe_done"
  List<String> requiredIngredients = <String>[];
  String? recipeInput;
  while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
    if (recipeInput != null) {
      requiredIngredients.add(recipeInput);
    }
  }
  
  // TODO: اكتب كودك أدناه
  // استخدم pantryIngredients.contains() للتحقق من كل مكون مطلوب
  // إنشاء قائمة لتخزين المكونات المفقودة
  // تحقق من التوفر واطبع النتائج بالتنسيق المطلوب
  
  // طباعة النتائج (استبدلها بتنفيذك الخاص)
  print("Recipe: $recipeName");
  print("Pantry ingredients: $pantryIngredients");
  print("Required ingredients: $requiredIngredients");
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow