例如:double[] arrA = new double[]{2.4,1.2,3.6}
怎样得到这个结果 int arrB = new int[]{1,0,2}?如果有两项相同,则左边的靠前,如:double[] arrA = new double[]{1.2,1.2,3.6}
则 arrB = new int[]{0,1,2}

解决方案 »

  1.   


    void Main()
    {
    double[] arrA = new double[]{2.4,1.2,3.6};
    var arrB=arrA.OrderBy(a=>a).ToArray();
    var result= (from a in arrA.Select((s,index)=>new{s,index})
               join b in arrB.Select((s,index)=>new{s,index})
       on a.s equals b.s
       select b.index).ToArray();
    result.ToList().ForEach(r=>Console.WriteLine(r));
       /*
            1
    0
    2
       */
    }
      

  2.   


    void   Main() 

    double[]   arrA   =   new   double[]{2.4,1.2,3.6}; 
    var   arrB=arrA.OrderBy(a=> a).ToArray(); 
    var   result=   (from   a   in   arrA.Select((s,index)=> new{s,index}) 
                          join   b   in   arrB.Select((s,index)=> new{s,index}) 
          on   a.s   equals   b.s 
          select   b.index).ToArray(); 
    result.ToList().ForEach(r=> Console.WriteLine(r)); 
          /* 
                    1 


          */ 
      

  3.   

    int[] arrB = arrA.Select((d,i)=>new {i,d}).OrderBy(x=>x.d).Select(x=>x.i).ToArray();
      

  4.   

    如果有两项相同,则左边的靠前这个不用担心,因为 OrderBy 是稳定排序。