2017-08-11 111 views
4
我有以下数组作为输入以按降序排序值

C#排序VS的JavaScript排序

var cars = ["8587009748118224023Po","8587009748118224023PP","8587009748118224023P,","8587009748118224023P$","8587009748118224023P<","8587009748118224023P?"] 

在C#,我使用OrderByDescending并得到以下输出

C#代码

var rslt= cars.OrderByDescending(a => a); 

结果

8587009748118224023PP,8587009748118224023Po,8587009748118224023P<,8587009748118224023P?,8587009748118224023P,,8587009748118224023P$ 

在Javascript中,我使用排序反向并得到如下不同的结果

JavaScript代码

cars.sort(); 
cars.reverse(); 

结果

8587009748118224023Po,8587009748118224023PP,8587009748118224023P?,8587009748118224023P<,8587009748118224023P,,8587009748118224023P$ 

任何人都可以帮助我如何对C#中的值进行排序,就像javascript ?.

+0

https://stackoverflow.com/questions/5430016/better-way-to-sort-array-in-descending-order – user93

回答

4

尝试改变StringComparer:

Array.Sort(cars, StringComparer.Ordinal); 
Array.Reverse(cars); 
+0

你是对的,下面的代码给出了我在C#中的正确结果。 var rslt = cars.OrderByDescending(a => a,StringComparer.Ordinal); – kombsh

4

它看起来像Javascript是做不区分大小写的排序。对于C#,您需要明确告诉它执行此操作。所以这应该工作;

var rslt = cars.OrderByDescending(a => a, StringComparer.OrdinalIgnoreCase); 

编辑:

从OP更新后,然后他发现这是不需要忽略大小写。所以下面的工作;

var rslt = cars.OrderByDescending(a => a, StringComparer.Ordinal); 
+0

它提供了以下不同结果(未例如JavaScript)8587009748118224023PP,8587009748118224023Po,8587009748118224023P?,8587009748118224023P <,8587009748118224023P ,, 8587009748118224023P $ – kombsh

+0

['如果未提供的compareFunction,元件由在统一代码点order'它们转换为字符串,并在比较字符串排序](HTTPS ://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description) – ASDFGerte

+1

@ jason.kaisersmith,你的回答给了我线索,下面一行给出了C#中的确切结果,就像javascript一样。 var rslt = cars.OrderByDescending(a => a,StringComparer.Ordinal); – kombsh