در C#، «تاپل» یک ساختار داده است که دادهها را سازماندهی میکند و دو یا چند فیلد از هر نوعی را در خود نگه میدارد.
معمولاً یک تاپل با قرار دادن دو یا چند عبارت جداشده با ویرگول، داخل یک جفت پرانتز ساخته میشود.
string boast = "All you need to know";
bool success = !string.IsNullOrWhiteSpace(boast);
(bool, int, string) triple = (success, 42, boast);
میتوان از تاپل در عملیات انتساب و مقداردهی اولیه، و همچنین بهعنوان مقدار بازگشتی یا آرگومان متد استفاده کرد.
فیلدها با استفاده از نحوهی نگارش نقطهای استخراج میشوند. بهصورت پیشفرض، فیلد اول Item1 است، فیلد دوم Item2 و به همین ترتیب. اسمهای غیرپیشفرض در ادامه بررسی میشوند.
// initialization
(int, int, int) vertices = (90, 45, 45);
// assignment
vertices = (60, 60, 60);
// return value
(bool, int) GetSameOrBigger(int num1, int num2)
{
return (num1 == num2, num1 > num2 ? num1 : num2);
}
// method argument
int Add((int, int) operands)
{
return operands.Item1 + operands.Item2;
}
اسم فیلدهایی مثل Item1 و موارد مشابه، کد خوانایی تولید نمیکند. کد زیر دو روش نشان میدهد که چطور به فیلدهای تاپل اسم بدهیم. همچنین توجه کنید که در کد زیر میتوان از var با تاپلها استفاده کرد و نوع را استنتاج کرد. این موضوع برای تاپلهایی با فیلدهای اسمدار و بیاسم هم به همان خوبی جواب میدهد.
// name items in declaration
(bool success, string message) results = (true, "well done!");
bool mySuccess = results.success;
string myMessage = results.message;
// name items in creating expression
var results2 = (success: true, message: "well done!");
bool mySuccess2 = results2.success;
string myMessage2 = results2.message;
در این تمرین، شما شمارههای تلفن را تحلیل میکنید.
از شما خواسته شده است ۲ قابلیت را پیادهسازی کنید.
شمارههای تلفنی که به روالها داده میشوند، تضمینشده به شکل NNN-NNN-NNNN هستند، مثلاً 212-515-9876، و null نیستند.
تحلیل شما باید ۳ بخش داده برگرداند:
متد (ایستا) PhoneNumber.Analyze() را پیادهسازی کنید تا اطلاعات شمارهی تلفن را تولید کند.
PhoneNumber.Analyze("631-555-1234");
// => (false, true, "1234")
متد (ایستا) PhoneNumber.IsFake() را پیادهسازی کنید تا با استفاده از اطلاعات شمارهی تلفنی که در کار ۱ تولید شده است، تشخیص دهید که شماره جعلی است یا نه.
PhoneNumber.IsFake(PhoneNumbers.Analyze("631-555-1234"));
// => true