我有一个多维数组,其中包含以下值:
multiarray = new int[,] { { 8, 63 },
{ 4, 2 },
{ 0, -55 },
{ 8, 57 },
{ 2, -120},
{ 8, 53 } };
我需要做的是按第一列对数组进行排序,然后在第二列对值相等的位置进行排序。
理想情况下,输出应如下所示:
8, 63
8, 57
8, 53
4, 2
2, -120
0, -55
这样做的最佳方式是什么?
答案 0 :(得分:1)
使用列表<> Linq的对象
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication19
{
class Program
{
static void Main(string[] args)
{
List<List<int>> multiarray = new List<List<int>>{
new List<int> { 8, 63 },
new List<int> { 4, 2 },
new List<int> { 0, -55 },
new List<int> { 8, 57 },
new List<int> { 2, -120},
new List<int> { 8, 53 }
};
List<List<int>> sortedList = multiarray.OrderBy(x => x[1]).OrderBy(y => y[0]).ToList();
}
}
}
答案 1 :(得分:1)
using System.IO;
using System;
using System.Linq;
class Program
{
static void Main()
{
// declare and initialize a JAGGED array
int[][] a=new int[][]{ new int[] { 8, 63 },
new int[] { 4, 2 },
new int[] { 0, -55 },
new int[] { 8, 53 },
new int[] { 2, -120},
new int[] { 8, 57 } };
//using LAMBDA expression
Array.Sort(a, (a1, a2) => { return (a2[0]-a1[0])+((a2[0]-a1[0])==0?(a2[1]-a1[1]):0);
});
Console.WriteLine("LAMBDA Sorting");
for(int i=0;i<6;i++)
Console.WriteLine(" {0}:{1} ",a[i][0],a[i][1]);
//using LINQ
var sorted = from x in a
orderby x[0] descending ,x[1] descending
select x;
Console.WriteLine("LINQ Sorting");
foreach(var item in sorted )
Console.WriteLine(" {0}:{1} ",item[0], item[1]);
}
答案 2 :(得分:0)
没有Linq,在范围列中排序索引(FromIndex ... ToIndex):
public class MyListArrComparer : IComparer<Int32[]>
{
public Int32 FromIndex {get; set;}
public Int32 ToIndex {get; set;}
public int Compare(Int32[] x, Int32[] y)
{
for (Int32 index=FromIndex; index<=ToIndex; index++) {
if (x[index]>y[index]) return -1;
if (x[index]<y[index]) return 1;
}
return 0;
}
}
您可以添加第三个ASC / DESC参数或列列,而不是范围。
使用示例:
MyListArrComparer comps = new MyListArrComparer();
comps.FromIndex=0;
comps.ToIndex=3;
hhList.Sort(comps);
关于WJ(AK)