一副牌按花色排序由大到小为:黑桃,红桃,梅花,方块。为了便于从A-K排序,定义黑桃至方块分别由数字4至1代表。如黑桃2用数字代表为402,红桃2为302,梅花2为202,方块2为102。如果用排序的方法显示的顺序为
黑桃402,红桃302,梅花202,方块102。我现想让红色的牌在一起,黑色的牌在一起,即黑桃402,梅花202,红桃302,方块102。应如何排序?谢谢!

解决方案 »

  1.   

       string[] _List = new string[] { "102", "302", "202", "402" };            Array.Sort(_List, new SortComparer());
            public class SortComparer : IComparer
            {
                int IComparer.Compare(Object x, Object y)
                {
                    int _X = int.Parse(x.ToString().Substring(0, 1));
                    int _Y = int.Parse(y.ToString().Substring(0, 1));                if (_X == _Y) return 0;                if (_X == 2 && _Y == 3) return -1;
                    if (_X == 3 && _Y == 2) return 1;                if (_X > _Y)return -1;
                    return 1;                
                }
            }这样...方法笨了点
      

  2.   

    xyd编码变一下,能够表示这种红黑关系就行了。
    或者一个自定义排序保证4后面是2,然后是3,1也行。
      

  3.   

    最好是重新编码黑桃2用数字代表为402,红桃2为202,梅花2为302,方块2为102否则只能算了,效率低下
    X代表数字402
    order by x/100%2,x/100 desc,x
    这样顺序就是402,403,202,302,102了
      

  4.   

    如果让我做,我不会这么做,我会用1到54代表一副扑克的所有牌,53表示小王,54大王。1到13表示方块A到方块K,以此类推,40到52表示黑桃A到黑桃K
      

  5.   

    四楼的老大给了启发,用了两个循环如下:
    int[] a=new int[13] {402,202,102,302,207,307,408,106,209,305,405,205,109};
    int p,m;
     for (int i = 0; i < 13; i++)
                {
                    for (m = i, j = i + 1; j < 13; j++)                    if (a[m] % 100 > a[j] % 100)
                            m = j;
                    if (m != i)
                    {
                        p = a[i];
                        a[i] = a[m];
                       a[m] = p;
                    }              }for (int i = 0; i < 13; i++)
                {
                    for (m = i, j = i + 1; j < 13; j++)                    if (a[m] % 100 == a[j] % 100 && a[m] /100%2 > a[j] /100%2  )
                            m = j;
                    if (m != i)
                    {
                        p = a[i];
                        a[i] = a[m];
                       a[m] = p;
                    }              }
    这样才将它们排在一起,有没效率高些的解法?