none
排序问题 RRS feed

  • 问题

  • 有一个二维数组

    (1.)string[,] arr={{A1,A2,A3}{B1,B2,B3,B4}}

    也有可以是这样

    (2.)string[,] arr={{A1,A2,A3,null,null}{B1,B2,B3,B4,B5}{C1,null,null,null,null}}

    是不定项的

    现在我要对这个数组排序为:A1,B1,A2,B2,A3,B3,A1

    要怎么写??

    我写的:

      for (int k = 0; k < mediaInfo.GetLength(1); k++)
                            {
                                for (int j = 0; j < mediaInfo.GetLength(0); j++)
                                {
                                    if (tote > indexRow)
                                    {

                                        if (!string.IsNullOrEmpty(mediaInfo[j, k]))
                                        {
                                            deliveryinfoTmp.Update(new Md_KK_DeliveryinfoTmp()
                                            {
                                                ProjectCode = projectInfo[j, k],
                                                MediaCode = mediaInfo[j, k],

                                                DeliVeryID = modelLlist[indexRow].DeliVeryID
                                            });

                                            indexRow++;
                                        }
                                        
                                    }

                                }
                            }

    结果:A1,B1,A2,B2,A3,B3,B4

    2013年8月22日 9:30

答案

  • 您好,
    請問您排序的logic是什麼呢?
    {{A1,A2,A3}{B1,B2,B3,B4}}
    排出來是  A1,B1,A2,B2,A3,B3,A1 ?

    還是 A1,B1,A2,B2,A3,B3,A1,B4 呢?

    那 {{A1,A2,A3,null,null}{B1,B2,B3,B4,B5}{C1,null,null,null,null}}

    排出來的結果是?

     
    new string[] {"A1", "A2", "A3"},
    new string[] {"B1", "B2", "B3", "B4"}

    出來的結果是
    A1, B1, A2, B2, A3, B3, A1, B4 嗎?

    以下的code請您參考看看,

    string[][] jaggedArray = {
    	new string[] {"A1", "A2", "A3"},
    	new string[] {"B1", "B2", "B3", "B4"} 
    };
    //是否需要針對array排序?
    for (int i = 0; i < jaggedArray.Length; i++)
    {
    	Array.Sort(jaggedArray[i]);
    }
    //取得jaggedArray最長的長度
    int maxArrayLen = (from el in jaggedArray
    				   select el.Length).Max()-1;
    List<string> result = new List<string>();
    
    for (int j = 0; j <= maxArrayLen; j++)
    {
    	for (int i = 0; i < jaggedArray.Length; i++)
    	{
    		var idx = j;
    		if (idx >= jaggedArray[i].Length)
    			idx = j%maxArrayLen;
    		result.Add(jaggedArray[i][idx]);
    
    	}
    }
    


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2013年8月23日 1:33
  • 你可以先建立一个 M * N 的矩阵 A,然后转置成 N * M 的矩阵 B,那么你现在可以很容易的给每行排个序,然后再从矩阵 B 中依次读入不为 null 的数据。

    2013年8月23日 1:50

全部回复

  • 您好,
    請問您排序的logic是什麼呢?
    {{A1,A2,A3}{B1,B2,B3,B4}}
    排出來是  A1,B1,A2,B2,A3,B3,A1 ?

    還是 A1,B1,A2,B2,A3,B3,A1,B4 呢?

    那 {{A1,A2,A3,null,null}{B1,B2,B3,B4,B5}{C1,null,null,null,null}}

    排出來的結果是?

     
    new string[] {"A1", "A2", "A3"},
    new string[] {"B1", "B2", "B3", "B4"}

    出來的結果是
    A1, B1, A2, B2, A3, B3, A1, B4 嗎?

    以下的code請您參考看看,

    string[][] jaggedArray = {
    	new string[] {"A1", "A2", "A3"},
    	new string[] {"B1", "B2", "B3", "B4"} 
    };
    //是否需要針對array排序?
    for (int i = 0; i < jaggedArray.Length; i++)
    {
    	Array.Sort(jaggedArray[i]);
    }
    //取得jaggedArray最長的長度
    int maxArrayLen = (from el in jaggedArray
    				   select el.Length).Max()-1;
    List<string> result = new List<string>();
    
    for (int j = 0; j <= maxArrayLen; j++)
    {
    	for (int i = 0; i < jaggedArray.Length; i++)
    	{
    		var idx = j;
    		if (idx >= jaggedArray[i].Length)
    			idx = j%maxArrayLen;
    		result.Add(jaggedArray[i][idx]);
    
    	}
    }
    


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2013年8月23日 1:33
  • 你可以先建立一个 M * N 的矩阵 A,然后转置成 N * M 的矩阵 B,那么你现在可以很容易的给每行排个序,然后再从矩阵 B 中依次读入不为 null 的数据。

    2013年8月23日 1:50