使用自定义字母顺序排序

时间:2014-11-26 18:23:41

标签: c# sorting json.net

我使用第三方服务返回带有状态代码(如Y,N,S,D等)的JSON对象。我想根据状态代码的含义对结果进行排序,这样Y应该出现在N之前,它应该出现在S之前,它应该出现在D之前。在CSharp中实现这一目标的最简单方法是什么?性能并不是最重要的,因为我希望任何给定的请求最多可以获得10个结果。

回复示例:

[ { ..., status: 'Y' }, 
  { ..., status: 'D' }, 
  { ..., status: 'N' } ]

我已经使用JSON.NET将这些反序列化为JArray,如果这有助于作为起点。

2 个答案:

答案 0 :(得分:3)

我认为最简单的方法是创建一个基于字母检索某种订单键的方法。例如:

public int GetSortKey(string statusCode) {
     switch (statusCode) {
         case "Y": return 1;
         case "N": return 2;
         (etc)
     }
}

然后通过方法的结果按数组排序。

答案 1 :(得分:2)

您可以创建自定义比较类

public class CustomSorter : IComparer
{
    public int Compare(object x, object y)
    {
        var chars = "YNSD";
        if (chars.IndexOf((char)x) < chars.IndexOf((char)y))
            return -1;
        return chars.IndexOf((char)x) > chars.IndexOf((char)y) ? 1 : 0; 
    }
}

然后使用新的分拣机

对您拥有的数组进行排序