1
00:00.110 --> 00:02.840
در این ویدیو می‌خوایم ببینیم چطور با موارد تکراری کنار بیایم.

2
00:02.840 --> 00:09.710
بنابراین فرض کنید ما یک ورودی در 104 با Flop Smith داریم.

3
00:09.710 --> 00:15.320
و ما نمی‌دونیم که یک Flop Smith در 104 در این Key (کلید) وجود داره.

4
00:15.320 --> 00:19.010
و به طور اتفاقی ما یک کارمند اینجا اضافه می‌کنیم.

5
00:19.010 --> 00:26.930
بنابراین `employees.Add` و می‌گیم در 104 می‌خوایم Mike JK رو اضافه کنیم.

6
00:26.930 --> 00:27.620
بسیار خب.

7
00:27.620 --> 00:30.800
پس اگه حالا این کار رو انجام بدیم، بیایید اجراش کنیم.

8
00:30.800 --> 00:33.440
خواهیم دید که به یک خطا برخواهیم خورد.

9
00:33.440 --> 00:36.410
بنابراین می‌گه: `System.ArgumentException`.

10
00:36.410 --> 00:39.950
یک آیتم با Key یکسان قبلاً اضافه شده است.

11
00:39.950 --> 00:47.330
پس می‌بینید که نمی‌تونید یک آیتم جدید رو در همون Keyای که یک آیتم قبلاً درش وجود داره، اضافه کنید.

12
00:47.330 --> 00:50.630
پس چطور می‌تونید احتمالاً اون رو رفع کنید؟

13
00:50.630 --> 00:52.580
یا چطور می‌تونید از دستش خلاص بشید؟

14
00:52.580 --> 01:01.370
خب، یکی از راه‌ها اینه که اگه مطمئن نیستید که آیا یک آیتم در این Key خاص وجود داره یا نه، می‌تونید از این روش اینجا استفاده کنید.

15
01:01.370 --> 01:17.480
پس به جای اینکه بگید Mike رو در 104 اضافه کنید یا Mike JK، کاری که می‌تونستیم انجام بدیم این بود که فقط بگیم 104 رو اضافه کن. بنابراین در این Key 104، Mike JK رو وارد کن، باشه، اما این در واقع داره Update می‌کنه، درسته.

16
01:17.480 --> 01:19.310
پس این اضافه کردن نخواهد بود.

17
01:19.310 --> 01:23.450
اما اگه واقعاً بخوایم مطمئن بشیم که یک آیتم رو اضافه می‌کنیم چی؟

18
01:23.450 --> 01:29.120
خب، نکته اینه که کاری که می‌تونیم انجام بدیم اینه که چک کنیم آیا آیتم از قبل وجود داره یا نه.

19
01:29.120 --> 01:39.380
پس می‌تونیم جلو بریم و بگیم: `if (!employees.ContainsKey)` (اگر کارمندان شامل Key نبود). و بعد باید بگیم داریم به کدوم Key نگاه می‌کنیم.

20
01:39.380 --> 01:55.130
پس اگه یک Key در 104 وجود داشته باشه، اون وقت ما آیتم رو اضافه نمی‌کنیم. با این حال، می‌تونیم علامت تعجب رو هم اضافه کنیم و بگیم اگه هیچ آیتمی در این Key 104 وجود نداشته باشه.

21
01:55.130 --> 02:07.430
پس `employees` آیتمی در این Key 104 نداره، اون وقت جلو برو و بگو `employees.Add` و بعد Mike Jake خودت رو در 104 اضافه کن.

22
02:07.430 --> 02:10.580
باشه، همونطور که می‌بینید، در مورد نام‌ها خیلی خلاقم.

23
02:10.700 --> 02:12.140
بنابراین، بله، اینجاست.

24
02:12.140 --> 02:15.800
پس اینطوری می‌تونید موارد تکراری رو مدیریت کنید.

25
02:15.800 --> 02:20.330
می‌تونید چک کنید آیا یک آیتم وجود داره و بعد اگه خواستید می‌تونید اون رو اضافه کنید.

26
02:20.330 --> 02:29.030
در غیر این صورت، باید IDای رو پیدا می‌کردید که هنوز آزاده و باید اون رو اونجا اضافه می‌کردید.

27
02:29.030 --> 02:47.660
حالا این اساساً یک حلقه `while` خواهد بود که در اون از طریق تمام Keyهایی که وجود دارن یا وجود ندارن می‌رید و مثلاً، اون IDها رو تا جایی که Key آزاد بشه، افزایش می‌دید، و بعد فقط آیتم جدید رو در اون موقعیت Key اضافه می‌کردید، به طور خاص در این Key خاص.

28
02:47.660 --> 02:51.560
پس این یک راه برای مدیریت اون خواهد بود، باشه.

29
02:51.560 --> 02:53.780
پس ما یک **Counter** (شمارنده) ایجاد می‌کنیم.

30
02:53.780 --> 02:55.910
از این حلقه `while` استفاده می‌کنیم که در اون فقط می‌گیم: باشه.

31
02:55.910 --> 03:01.250
تا زمانی که در این موقعیت **Counter** یک کارمند وجود داره، فقط **Counter** رو افزایش بده.

32
03:01.250 --> 03:09.860
و بعد در نقطه‌ای که دیگه اینطور نیست، این حلقه `while` تموم می‌شه و ما به این خط اینجا می‌رسیم که در اون فقط می‌گیم: باشه، در اون موقعیت **Counter**.

33
03:09.860 --> 03:12.680
هر موقعیتی که هست، Jesus Christ رو اضافه کن.

34
03:12.710 --> 03:18.320
باشه، پس این فقط یک راه‌حل موقتی کوچیکه که می‌تونید برای اون موقعیت خاص استفاده کنید.

35
03:18.320 --> 03:22.010
حالا یک راه دیگه می‌تونه این باشه که این واقعاً فقط یک راه‌حل موقتیه.

36
03:22.010 --> 03:24.320
پس بذارید از شر این خلاص بشم.

37
03:24.320 --> 03:33.020
اگه می‌خواید یک کارمند رو در یک ID مشخص اضافه کنید، اما مطمئن نیستید که می‌تونید یا نه، می‌تونید از متد `TryAdd` استفاده کنید.

38
03:33.020 --> 03:36.110
پس می‌تونید از `employees.TryAdd` استفاده کنید.

39
03:36.110 --> 03:45.200
و کاری که این `TryAdd` انجام می‌ده اینه که یک `bool` برمی‌گردونه، و سعی می‌کنه یک آیتم رو در یک ID مشخص به Dictionary شما اضافه کنه.

40
03:45.350 --> 03:59.240
پس فرض کنید اگه بخوام کسی رو در 102 اضافه کنم و بهش نام Michael Brims رو بدم، اون وقت این فقط کار می‌کنه اگه در 102 کسی نباشه.

41
03:59.240 --> 04:02.360
بنابراین اگه این نقطه هنوز در دسترس باشه.

42
04:02.360 --> 04:06.110
پس می‌تونم فقط یک `bool` ایجاد کنم که بگه اضافه شده.

43
04:06.110 --> 04:12.710
پس مثلاً اگه این کار کرد، پس اگه اضافه کردن کار کرد، اون وقت این `true` خواهد بود. در غیر این صورت `false` خواهد بود.

44
04:12.710 --> 04:23.750
پس می‌تونم فقط چک کنم اگه `added` (اضافه شده) `true` نیست، اون وقت قراره بگم نتونست کارمند رو اضافه کنه یا کارمند از قبل وجود داره.

45
04:23.750 --> 04:30.710
پس کارمند با ID 102 از قبل وجود داره.

46
04:30.710 --> 04:35.180
پس اگه این رو اجرا کنیم، خواهیم دید که این در واقع از قبل وجود داره.

47
04:35.180 --> 04:39.860
پس کارمند با ID 102 از قبل وجود داره و اون Jane Smith هست. باشه.

48
04:39.860 --> 04:41.210
و چرا ما Jane Smith رو می‌دونیم.

49
04:41.210 --> 04:50.510
خب چون ما از این حلقه `for each` استفاده کردیم تا تمام کاربرانی که داریم یا کارمندانی که در Dictionaryمون داریم رو نمایش بدیم. باشه.

50
04:50.510 --> 04:54.200
پس این‌ها فقط چند موردی بود که می‌تونید با Dictionaryها انجام بدید.

51
04:54.200 --> 05:03.140
به نظرم بیایید به Dictionaryای نگاه کنیم که Key اون هنوز `int` هست، اما Value اون پیچیده‌تر از فقط یک `string` هست.

52
05:03.140 --> 05:05.480
بسیار خب، پس در ویدیوی بعدی می‌بینمتون.