ورود

نسخه کامل مشاهده نسخه کامل : این دستور در Orderby چگونه کار میکند؟



Shervan360
02-02-2020, 18:18
با سلام،

عذرمیخوام میشه یک مثال بزنید که این دستور داره چطور کار میکنه؟؟


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در




برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

خب ما یک دنباله ای از اعداد به ترتیب داریم که از 1 تا 49 هست و هدف تصادفی کردن اون هست.

با دستور

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ما یک عدد تصادفی درست میکنیم، اما چطور در OrderBy این عدد اجرا میشه؟ چطور مقایسه میشه؟ یعنی 49 تا عدد تصادفی ایجاد میشه و 49 بار لیست بر مبنای اون تغیر میکنه؟

بر فرض مثال در اولین حرکت، عدد تصادفی که ایجاد میشه 1243131882 هست حال این عدد چطور لیست بر مبناش جابجا میشه؟ :blink:

ممنونم

_H2_
05-02-2020, 02:04
سلام
اول باید عرض کنم که سه نسخه از تابع Linq و همچنین تابع OrderBy وجود دارد
که سه بار متفاوت و با سه الگوریتم و سه روش متفاوت نوشته اند !
تابعی که روی IEnumerable و IQueryable و ParallelEnumerable کار میکنند.

این را مشخص کنم که در این مطلب جاری ما داریم برای Enumerable-OrderBy صحبت میکنیم.


تابع OrderBy مرتب سازی را با الگوریتم QuickSort در قالب یک زنجیره/Chain ای از آرایه های elements و آرایه های keys انجام میدهد که به یک آرایه int از موقیت ها نگاشت/map شده اند

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی نیاز نیست اینقدر پیچیده اش کنیم، جور دیگری توضیح میدهم که نگاشت/map در مفهوم tuple ادقام شود و ساده تر باشد ...

برای یک تابع OrderBy تکی میتوانید چنین فرض کنید که تابع فوق یک جدول دو ستونه/Tuple از کلید-عنصر ها تشکیل میدهد، مانند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بعد از تشکیل این جدول دو ستونه از Tuple ها می آید و بر اساس ستون اول مرتب سازی را انجام میدهد.
حالا شما آمده اید و بجای Price تابع Rand قرار داده اید، فرق خاصی نکرده !
فقط مقادیر فیلد اول یا ستون اول را عوض کرده اید.
این بار OrderBy آرایه/جدولی شبیه این تشکیل میدهد.

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