1
00:00.110 --> 00:00.830
دوباره خوش آمدید.

2
00:00.830 --> 00:06.140
در این ویدیو قراره به کلمه کلیدی **remove** (حذف کردن) نگاه کنیم، چون حالا می‌دونیم چطور آیتم‌ها رو به

3
00:06.140 --> 00:08.750
**list** اضافه کنیم. اما چطور آیتم‌ها رو از **list** حذف کنیم؟

4
00:08.750 --> 00:11.480
خب، متد **remove** وجود داره.

5
00:11.480 --> 00:16.580
و بنابراین کاری که قراره انجام بدم اینه که از **colors list** ویدیوی قبلی خودم استفاده کنم.

6
00:16.580 --> 00:20.360
و فقط می‌گم **colors.Remove**. اوکی.

7
00:20.360 --> 00:27.200
پس این متد **remove** به من اجازه می‌ده که یک آیتم خاص رو داخل **list** خودم حذف کنم.

8
00:27.200 --> 00:34.700
بنابراین اینجا دارم از کلمه کلیدی **remove** استفاده می‌کنم و به طور خاص دارم می‌گم که کدوم آیتم می‌خوام حذف بشه.

9
00:34.700 --> 00:37.670
حالا در این مورد دارم از رشته **"red"** (قرمز) استفاده می‌کنم.

10
00:37.670 --> 00:40.130
پس دقیقاً به همون شکل نوشته شده.

11
00:40.130 --> 00:43.820
به همین دلیله که این **"red"** بعداً حذف خواهد شد.

12
00:43.820 --> 00:47.150
پس بیاید به حلقه **foreach** خودمون نگاه کنیم.

13
00:47.150 --> 00:53.570
پس من این حلقه **foreach** رو کپی کردم. و دوباره اینجا **paste** (جایگذاری) کردم تا بتونیم تفاوت رو ببینیم.

14
00:53.570 --> 00:58.070
پس بیاید این رو اجرا کنیم و خواهیم دید: رنگ‌ها در **colors list**...

15
00:58.070 --> 01:02.420
پس **red**، **blue** (آبی) و **green** (سبز). و بعد رنگ‌های فعلی در **colors list**: **blue** و **green**.

16
01:02.420 --> 01:04.340
پس ما در واقع **red** رو حذف کردیم.

17
01:04.340 --> 01:09.290
با این حال، بیاید به مثالی نگاه کنیم که **colors.Add** داریم.

18
01:09.290 --> 01:13.580
و بعد یک **"red"** دیگه اینجا اضافه می‌کنیم، به این صورت.

19
01:13.580 --> 01:16.310
حالا بیاید دوباره **list** رو اجرا کنیم و ببینیم چه اتفاقی می‌افته.

20
01:16.310 --> 01:22.100
پس می‌بینید **red**، **blue**، **green**، **red** و بعد رنگ‌های فعلی در **list**: **blue**، **green**، **red**.

21
01:22.100 --> 01:28.460
پس کاری که انجام داد این بود که اولین ورودی **"red"** رو داخل **list** حذف کرد.

22
01:28.460 --> 01:34.490
تمام **"red"**های **list** رو حذف نکرد، پس فقط اولین نمونه (instance) از **"red"** رو حذف کرد.

23
01:34.490 --> 01:38.390
و این واقعاً در مورد متد **remove** مهمه که بدونید.

24
01:38.390 --> 01:39.740
پس می‌تونید نشانگر رو روش نگه دارید.

25
01:39.740 --> 01:46.010
و می‌گه: "اولین وقوع یک **object** خاص رو از **list** حذف می‌کنه." اوکی.

26
01:46.010 --> 01:48.380
و ضمناً، چیزی رو هم **return** (برمی‌گردونه) می‌کنه.

27
01:48.380 --> 01:58.610
پس اگه می‌خواید ذخیره کنید که آیا تونسته اون رو حذف کنه یا نه، می‌تونید اون رو داخل یک **bool** ذخیره کنید، چون می‌گه: "در صورت حذف موفقیت‌آمیز آیتم، **true** برمی‌گرداند، در غیر این صورت **false**."

28
01:58.610 --> 02:02.990
"این متد همچنین در صورتی که آیتم در **list** پیدا نشود، **false** برمی‌گرداند."

29
02:03.020 --> 02:13.760
پس اگه ما مثلاً از **"red"** با حروف کوچک استفاده نکنیم، بلکه از **"Red"** با حرف بزرگ استفاده کنیم و دوباره این رو اجرا کنیم، اون وقت می‌بینیم **red**، **blue**، **green**، **red** و بعد هنوز **red**، **blue**، **green**، **red** رو می‌بینیم.

30
02:13.760 --> 02:15.800
چون **"Red"** با حرف بزرگ...

31
02:15.800 --> 02:18.830
پس **"Red"** با **R** بزرگ در **list** وجود نداره.

32
02:18.830 --> 02:21.020
پس اون رو حذف نمی‌کنه.

33
02:21.020 --> 02:21.710
اون نمی‌دونه.

34
02:21.710 --> 02:25.310
خب سعی می‌کنه اون رو حذف کنه، اما **"Red"** با حرف بزرگ اونجا وجود نداره.

35
02:25.310 --> 02:34.130
پس اگه بخواید اون رو در یک **boolean** ذخیره کنید، مثلاً بگید **bool deletingSuccessful** (حذف موفقیت‌آمیز)، یا می‌تونید بگید **isDeletingSuccessful**

36
02:34.130 --> 02:44.060
برابر است با **colors.Remove("Red")** و بعد اون رو چاپ کنید، یا می‌خواید وضعیت اون رو ببینید که کجاست.

37
02:44.240 --> 02:47.120
می‌تونید اینجا فقط از **debugging** (عیب‌یابی) استفاده کنید.

38
02:47.120 --> 02:49.850
پس همه اون‌ها رو چاپ کرد.

39
02:49.850 --> 02:54.560
و حالا در این مرحله **isDeletingSuccessful** روی **false** تنظیم شده.

40
02:54.560 --> 02:59.990
حالا اگه به خط بعدی بریم خواهیم دید که هنوز **false** هست چون به طور پیش‌فرض **false** بوده.

41
02:59.990 --> 03:02.690
پس هنگام ایجاد یک **bool**، به طور پیش‌فرض **false** هست.

42
03:02.690 --> 03:10.010
اما حتی بعد از اینکه خط رو به طور کامل اجرا کردیم، می‌تونیم ببینیم که **isDeletingSuccessful** هنوز **false** هست.

43
03:10.010 --> 03:13.970
و این باید یک **D** بزرگ باشه اگه بخوایم اینجا واقعاً دقیق باشیم.

44
03:13.970 --> 03:18.800
پس بله، این تقریباً همون چیزیه که باید در مورد متد **remove** بدونید.

45
03:18.800 --> 03:28.700
حالا نحوه حذف کردن رو می‌دونید، اما محدودیت‌های نحوه حذف آیتم‌ها از یک **list** داده شده رو هم می‌دونید.

46
03:28.700 --> 03:34.160
خب، حالا اگه می‌خواستم تمام **"red"**ها رو از **array** خودم حذف کنم، چطور؟

47
03:34.160 --> 03:35.420
چطور می‌تونستم این کار رو انجام بدم؟

48
03:35.420 --> 03:38.240
خب، ویدیو رو متوقف کنید و خودتون امتحان کنید.

49
03:38.240 --> 03:39.890
اوکی، پس امیدوارم امتحان کرده باشید.

50
03:39.890 --> 03:43.160
و این اینجا راه حل هست. یا یک راه حل.

51
03:43.160 --> 03:44.420
چندین راه حل وجود داره.

52
03:44.420 --> 03:48.710
واضحاً من نمی‌خواستم که شما فقط این خط کد رو چندین بار اجرا کنید.

53
03:48.710 --> 03:52.820
پس **colors.Remove("red")**. من نمی‌خواستم که شما فقط اون رو چهار بار یا هر چند بار بنویسید.

54
03:52.820 --> 04:05.900
من می‌خواستم مطمئن بشم که شما فقط به همان تعداد که وجود داره، آیتم **"red"** رو حذف می‌کنید، و سعی نکنید بیشتر حذف کنید. پس کاری که الان داریم انجام می‌دیم اینه که این **boolean** رو ایجاد می‌کنیم: **isDeletingSuccessful** برابر است با **colors.Remove("red")**.

55
04:05.900 --> 04:13.670
پس اگه بتونیم یک رنگ **red** رو حذف کنیم، اون وقت می‌گیم **isDeletingSuccessful**. پس قراره این رو دوباره یک بار اجرا کنه.

56
04:13.670 --> 04:27.200
پس اول از همه قراره چک کنه: باشه. آیا **true** هست؟ تا زمانی که تونستیم یک آیتم رو حذف کنیم، فرض می‌کنیم که به طور بالقوه آیتم‌های بیشتری داریم. بنابراین ما می‌گیم **isDeletingSuccessful** برابر است با **colors.Remove**.

57
04:27.200 --> 04:35.960
پس در اون صورت داریم یک آیتم دیگه رو حذف می‌کنیم. اگه یک آیتم دیگه وجود داشته باشه، اگه دیگه هیچ آیتمی وجود نداشته باشه، این **boolean** اینجا **false** خواهد بود.

58
04:35.960 --> 04:39.710
بنابراین این حلقه **while** دیگه اجرا نخواهد شد.

59
04:39.710 --> 04:41.630
پس این یک راه برای انجام اون هست.

60
04:41.630 --> 04:44.840
حالا واضحاً راه حل‌های دیگه‌ای برای این مشکل وجود داره.

61
04:44.840 --> 04:54.950
اما حالا بیاید این کد رو اجرا کنیم و می‌تونیم ببینیم: رنگ‌های فعلی در **colors list**: **red**، **blue**، **green**، **red** و بعد رنگ‌های فعلی در **colors list**: **blue** و **green**.

62
04:54.950 --> 05:03.810
پس کاری که ما اینجا انجام دادیم اینه که از شر تمام رنگ‌های **red** داخل **colors list** خلاص شدیم.

63
05:03.810 --> 05:13.020
پس ایده واقعاً اینه که به این طریق ما قادر هستیم یک آیتم خاص رو حذف کنیم، حتی اگه چندین بار وجود داشته باشه.

64
05:13.140 --> 05:17.460
پس چندین نمونه از اون در **list** هست. ما از شر اون‌ها خلاص می‌شیم.

65
05:17.460 --> 05:19.620
بسیار خب. پس برای این ویدیو کافیه.

66
05:19.620 --> 05:23.400
شما رو در ویدیوی بعدی می‌بینم.