amiref
چهارشنبه 13 مرداد 1389, 15:06 عصر
با سلام
من متوجه نمی شوم که چرا نتیجه ی این دو تا sort متفاوته و یا به عبارت بهتر متوجه نمی شم در هر کدام از این دو کد چه پروسه و فرایندی طی می شود . ممنون می شم اگه کمک کنید .
array = [3,1,5,2,4]
array.sort { |v1,v2| v1 <=> v2 }
array.sort { |v1,v2| v2 <=> v1 }
r00tkit
چهارشنبه 13 مرداد 1389, 16:26 عصر
سلام
Comparisons for the sort (http://www.barnamenevis.org/forum/Array.html#M002242) will be done using the <=> operator or using an optional code block. The block implements a comparison between a and b, returning -1, 0, or +1
این تابع (sort) دو مقدار داره شده بهش رو مقایسه می کنه یعنی همهی جفت حالات رو مقایسه می کنه با توجه به بزرگی و کوچگی اول در مقایسه با دومی مقدار ( 1,0,-1) رو بر می گردونه اگه -1 بر گشت یعنی v1 کوچک تر از v2 هستش پس جای این دو عوض می شه (v1 سمت چپی هستش) پس می شه مرتب سازی سعودی حالا اگه جای v1 و v2 رو عوض کنیم می شه نزولی
چند مثال:
a = [1, 2, "three", "four", 5, 6]
b = a.sort {|x,y| x.to_s <=> y.to_s}
# b is now [1, 2, 5, 6, "four", "three"]
مثال جالبیه همیشه 42 اخر هستش
( یادت باشه برای بلاک می شه از do/end استفاده کرد)
[1, 100, 42, 23, 26, 10000].sort do |x, y|
x == 42 ? 1 : x <=> y
end
# => [1, 23, 26, 100, 10000, 42]
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.