Sắp xếp mảng dữ liệu không sử dụng vòng lặp
Xin gửi các bạn 1 hàm sắp xếp mảng dữ liệu không sử dụng vòng lặp. arr là mảng cần sắp xếp, isText=true là sắp xếp mảng kiểu chuỗi, ngược lại là kiểu số(mặc định là kiểu số), isDESC=true là sắp xếp giảm dần, ngược lại là tăng dần(mặc định là tăng dần).
Đây là thủ thuật lợi dụng tính năng sắp xếp có sẵn trên ngôn ngữ khác(JavaScript) để thực hiện, có hạn chế là phải chuyển qua 1 chuỗi trung gian nên khi trả về luôn là mảng chuỗi, thích hợp cho việc hiển thị, còn dùng để tính toán thì sẽ có hạn chế. Về tốc độ thì tôi chưa test kỹ, nhưng có vẻ khả quan hơn phương pháp sử dụng vòng lặp thông thường.
Sưu tầm: http://www.giaiphapexcel.com/forum/showthread.php?38005-S%E1%BA%AFp-x%E1%BA%BFp-m%E1%BA%A3ng-d%E1%BB%AF-li%E1%BB%87u-kh%C3%B4ng-s%E1%BB%AD-d%E1%BB%A5ng-v%C3%B2ng-l%E1%BA%B7p&
Xin gửi các bạn 1 hàm sắp xếp mảng dữ liệu không sử dụng vòng lặp. arr là mảng cần sắp xếp, isText=true là sắp xếp mảng kiểu chuỗi, ngược lại là kiểu số(mặc định là kiểu số), isDESC=true là sắp xếp giảm dần, ngược lại là tăng dần(mặc định là tăng dần).
Đây là thủ thuật lợi dụng tính năng sắp xếp có sẵn trên ngôn ngữ khác(JavaScript) để thực hiện, có hạn chế là phải chuyển qua 1 chuỗi trung gian nên khi trả về luôn là mảng chuỗi, thích hợp cho việc hiển thị, còn dùng để tính toán thì sẽ có hạn chế. Về tốc độ thì tôi chưa test kỹ, nhưng có vẻ khả quan hơn phương pháp sử dụng vòng lặp thông thường.
Code:
Public Function SortArray(arr, Optional isText As Boolean = False, Optional isDESC As Boolean = False)
Dim sCommand As String
sCommand = "('" & Join(arr, vbBack) & "').split('" & vbBack & "').sort("
If isText Then
sCommand = sCommand & ")"
Else
sCommand = sCommand & "function(a,b){return (a-b)})"
End If
If isDESC Then sCommand = sCommand & ".reverse()"
sCommand = sCommand & ".join('" & vbBack & "')"
Dim objSC
Set objSC = CreateObject("MSScriptControl.ScriptControl")
objSC.Language = "JavaScript"
SortArray = Split(objSC.Eval(sCommand), vbBack)
End Function
Sưu tầm: http://www.giaiphapexcel.com/forum/showthread.php?38005-S%E1%BA%AFp-x%E1%BA%BFp-m%E1%BA%A3ng-d%E1%BB%AF-li%E1%BB%87u-kh%C3%B4ng-s%E1%BB%AD-d%E1%BB%A5ng-v%C3%B2ng-l%E1%BA%B7p&