SMAH1
SMAH1
خواندن ۲ دقیقه·۲ سال پیش

چند ترفند Linq

سالهاست که دات نت با استفاده از Linq برنامه‌نویسی را ساده‌تر کرده است. در اینجا به چند ترفند که ممکن است تاکنون استفاده نکرده باشید می‌پردازیم. البته قرار نیست به مکانیزم و جزئیات بپردازیم. بیشتر به عنوان یادآوری و یا یک استفاده «جالب» به آن نگاه کنید.

چند ترفند Linq
چند ترفند Linq

ایجاد آرایه با مقدار اولیه

فرض کنید می خواهید یک آرایه ده عضوی از نوع int با مقدار اولیه 5 بسازید. در حالت سنتی شما ابتدا آرایه را به طول مورد نظر می سازید و بعد یک حلقه برای مقدار دهی اولیه در نظر می گیرید. ولی با linq به سادگی زیر است:

int[] array = Enumerable.Repeat(0, 10).Select(x => 5).ToArray();

حتی اگر بخواهید یک ارایه از یک نمونه کلاس بسازید هم کافیست به جای 5 عبارت new MyClass() استفاده شود. با کمی تغییر می توانید بسیاری از مقداردهی‌های اولیه مدنظر را پیاده سازی کنید.

مثلا اگر بخواهید یک مجموعه ده عضوی از اعداد تصادفی بین 0 تا 100 ایجاد کنید داریم:

Random rnd = new Random(); int[] array = Enumerable.Repeat(0, 10).Select(x => rnd.Next(0, 100)).ToArray();

دقت کنید که در این مجموعه ممکن است عدد تکراری داشته باشید.

یا برای ایجاد یک رشته تصادفی از کاراکترهای مورد نظر داریم:

Random rnd = new Random(); char[] characters = &quot0123456789ABCDEF&quot.ToCharArray(); var str = string.Join(null, Enumerable.Repeat(0, 10).Select(x => characters[rnd.Next(0, characters.Length)]).ToArray());

ایجاد یک مجموعه تصادفی غیر تکراری

فرض کنید می خواهید یک ارایه ده عضوی از اعداد 0 تا 9 به صورت تصادفی داشته باشد. به عبارت دیگر هر یک از اعداد مذکور فقط یک بار تکرار شده باشد.

Random rnd = new Random(); var randomSeq = Enumerable.Range(0, 10) .Select(i => new { rnd = rnd.Next(), data = i }) .OrderBy(x => x.rnd) .Select(x => x.data) .ToArray();

همچنین اگر بخواهید یک آرایه مثلا سه عضوی از اعداد تصادفی بین 0 تا 9 بدون تکرار داشته باشید، کافیست از take(3) استفاده کنید یعنی:

Random rnd = new Random(); var randomSeq = Enumerable.Range(0, 10) .Select(i => new { rnd = rnd.Next(), data = i }) .OrderBy(x => x.rnd) .Select(x => x.data) .Take(3) .ToArray();


فهرست تمام زیر مجموعه های یک مجموعه

کد زیر نیز تمام زیر مجموعه‌های آرایه‌ی arr را برای شما استخراج می کند:

char[] arr = { 'A', 'B', 'C', 'D' }; IEnumerable<IEnumerable<char>> subsets = from item in Enumerable.Range(0, 1 << arr.Length) select from i in Enumerable.Range(0, arr.Length) where (item & (1 << i)) != 0 select arr[i];

که خروجی چیزی شبیه این است:


A
B
AB
C
AC
BC
ABC
D
AD
BD
ABD
CD
ACD
BCD
ABCD
dot netتصادفی
یک برنامه نویس هستم.البته به دنیای رایانه و حواشی آن و همینطور فناوری بسیار علاقه دارم.
شاید از این پست‌ها خوشتان بیاید