دسته بندی ها
00:08 1398/11/21

حلقه foreach بهتر است یا for loop

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : Vb.Net سی شارپ WPF یونیتی

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4338
هوش مصنوعی

پاسخ هوش مصنوعی

انتخاب بین حلقه foreach و for به شرایط خاص و نیازهای برنامه بستگی دارد. در اینجا چند نکته در مورد کارایی و کاربرد هر یک از این حلقه ها بررسی شده است:

حلقه foreach:

- حلقه foreach برای تکرار روی مجموعه ها مانند آرایه ها و لیست ها طراحی شده است. این حلقه به دلیل سادگی و خوانایی کد، معمولاً برای پیمایش بر روی مجموعه ها استفاده می شود.

- در بسیاری از زبان ها، foreach با بهینه سازی ها همراه است و ممکن است به صورت داخلی بهینه تر از for عمل کند.

حلقه for:

- حلقه for به شما امکان می دهد تا کنترل بیشتری بر روی نحوه تکرار داشته باشید. برای مثال، می توانید از مقادیر مختلف برای حرکت در آرایه و یا تغییر حالت در هر مرحله استفاده کنید.

- در مواردی که نیاز به دسترسی به ایندکس خاصی دارید یا باید تغییراتی در ایندکس در حین تکرار اعمال کنید، for ممکن است مناسب تر باشد.

به طور کلی:

  • اگر نیاز به خوانایی و سادگی دارید و به ایندکس خاصی دسترسی ندارید، foreach انتخاب بهتری است.
  • اگر به عملکرد بهینه و کنترل بیشتر روی ایندکس ها و مراحل تکرار نیاز دارید، for را انتخاب کنید.

در نهایت، عملکرد هر دو حلقه به نحوه پیاده سازی زبان برنامه نویسی و نوع مجموعه ای که بر روی آن کار می کنید بستگی دارد، اما به طور کلی در اکثر موارد تفاوت کارایی قابل توجهی بین این دو وجود ندارد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : Sowgandi 08:22 1398/11/21

سلام. 
مسلما حلقه for سرعت بیشتری نسبت به foreach داره. و اگر در شرایط مساوی قرار گرفتید حتما از for استفاده کنید. اما سرعت زمانی خودشو نشون میده که تعداد آرایه یا چرخش حلقه خیلی زیاد بشه و در تعداد لوپ پایین سرعت خودشو زیاد نشون نمیده و میشه گفت سرعتشون تقریبا برابره! (اما به طور کلی سرعت for بیشتر از foreach است)

لینک زیر رو هم مطالعه کنید بد نیست. 

تفاوت حلقه های for و foreach در سی شارپ

ویرایش شده در دوشنبه 21 بهمن 1398 ساعت 08:31:41
به این پاسخ امتیاز بدهید    0
امتیاز: 876 رتبه: 3
پاسخ دهنده : fateme 15:30 1398/11/21

حلقه foreach کندتر از حلقه for loop هست.

اما چرا foreach کندتر است؟

اگر با آرایه هایی کار می کنید که ابعاد مشخصی دارند فرقی بین for-loop و for-each وجود ندارد. از آنجا که در پس زمینه کامپایلر سی شارپ بجای حلقه ی for-each حلقه ی for-loop جایگزین می کند. 

اما این تنها در صورتی است که آرایه را به IEnumerable تبدیل نکنید. کلاس IEnumerable برای پردازش آرایه از توابع Current و MoveNext استفاده می کند که در هر بار اجرای حلقه موقعیت جاری را چک می کند و شامل بک فرآیند try-catch هم میشود. این مسئله یک سربار روی حافظه و پردازش ایجاد می کند و منجر به کندتر شدن پردازش می شود. حتی اگر آرایه ابعاد ثابتی داشته باشد از آنجا که به IEnumerable تبدیل شده در پس زمینه قابل تبدیل به for-loop نیست. 

پس به طور کلی for-each کندتر از for-loop است. در مواردی که پرفورمنس حلقه اهمیت زیادی پیدا می کند بهتر است آن را با for-loop جایگزین کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
پاسخ دهنده : Kpa91 14:58 1399/04/28

البته همیشه سرعت عامل تعیین کننده انتخاب نوع دستورات نیست کارایی فرامین هم مهمه مسلماً کارایی foreach بهتره و درصد خطای محاسباتی برنامه نویس رو هم پایین میاره به خصوص چایی که ممکنه تشخیص ندید دقیقا تعداد دفعات انجام عمل چند تاست

به این پاسخ امتیاز بدهید    0
امتیاز: 12 رتبه: 59
پاسخ دهنده : meysam2017 09:19 1399/07/26

سلام

نوع عملکرد این حلقه ها متفاوت هست و هرکدوم کارکرد خودشو داره

وقتی شما بخواید تمام آیتم های یه مجموعه رو چک کنید از foreach استفاده میکنید

اما for صرفا برای چک کردن نیست، میتونه تولید یه عدد ساده تو یه رنجی باشه

نمیشه گفت کدوم بهتره، هرکدوم برا کارکرد خودش خوبه

به این پاسخ امتیاز بدهید    0
امتیاز: 0 رتبه: 7078
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود