// مجموعة التجزئة تحفظ كل قيمة مرة واحدة.
استورد std.io.println;
استورد std.text.number;
استورد std.collections.set;
عرف هاش_عدد(القيمة: &عدد): طبيعي { أرجع ((*القيمة) مثل طبيعي) * 2654435761; }
عرف عددان_متساويان(اليسار: &عدد, اليمين: &عدد): منطقي { أرجع *اليسار == *اليمين; }
عرف الرئيسية(): عدد {
دع المرات: متغير مجموعة<عدد> = أنشئ_مجموعة(هاش_عدد, عددان_متساويان);
دع القيم: متجه عدد = [4, 8, 4, 15, 8, 16, 4];
دع ف: متغير طبيعي = 0;
طالما (ف < (الطول(القيم) مثل طبيعي)) {
طابق أضف_إلى_مجموعة(&متغير المرات, القيم[ف]) مع
| نتيجة.نجح(_) -> { }
| نتيجة.خطأ(_) -> { أرجع 1; };
ف := ف + 1;
}
اطبع_سطر(طبيعي_إلى_نص(طول_مجموعة(&المرات)));
دع خمسة_عشر: عدد = 15;
دع ثلاثة_وعشرون: عدد = 23;
إذا (تحتوي_مجموعة(&المرات, &خمسة_عشر)) { اطبع_سطر("فيها 15"); };
إذا (!تحتوي_مجموعة(&المرات, &ثلاثة_وعشرون)) { اطبع_سطر("ليس فيها 23"); };
أرجع 0;
}// A hash set keeps each value once.
import std.io.println;
import std.text.number;
import std.collections.set;
def hash_int(value: &int): uint { return ((*value) as uint) * 2654435761; }
def same_int(left: &int, right: &int): bool { return *left == *right; }
def main(): int {
let seen: mutable set<int> = new_set(hash_int, same_int);
let values: vector int = [4, 8, 4, 15, 8, 16, 4];
let i: mutable uint = 0;
while (i < (length(values) as uint)) {
match set_insert(&mutable seen, values[i]) with
| result.ok(_) -> { }
| result.err(_) -> { return 1; };
i := i + 1;
}
println(uint_to_text(set_length(&seen)));
let fifteen: int = 15;
let twenty_three: int = 23;
if (set_contains(&seen, &fifteen)) { println("has 15"); };
if (!set_contains(&seen, &twenty_three)) { println("no 23"); };
return 0;
}
التشغيل
بالمفسر، دون ترجمة:
./build/sultanc run examples/ar/collections/set.snأو ترجمه إلى ملف تنفيذي:
./build/sultanc examples/ar/collections/set.sn -o build/example && ./build/example