C#中的多数组排序

我有这个数组:

int[] a = {5, 2, 3}; int[] b = {4, 1, 2}; string[] c = {"John", "Peter", "Max"}; 

我需要对第二个数组(b [])的值进行排序,但是与其他两个数组相关,以便它们相应地进行排序。 例如, 1将首先出现,因为它是最低的数字,并且因为b[] 1b[]中的2c[] "Peter" ,则表示2"peter"也将移动到第一个排序位置。 其他两列也是如此; 观察:

 int[] a = {2, 3, 5}; int[] b = {1, 2, 4}; string[] c = {"Peter", "Max", "John"}; 

我该怎么办?

我想我明白你在说什么。 您希望根据b的值对数组ac进行排序。

您可以使用Array.Sort按另一个数组对数组进行Array.Sort ,这允许您为键指定另一个数组,例如:

 int[] a = { 5, 2, 3 }; int[] b = { 4, 1, 2 }; string[] c = { "John", "Peter", "Max" }; Array.Sort(b.ToArray(), c); Array.Sort(b.ToArray(), a); Array.Sort(b); Console.WriteLine(string.Join(", ", a)); Console.WriteLine(string.Join(", ", b)); Console.WriteLine(string.Join(", ", c)); 

这将输出您的预期值。 请注意,我们使用ToArray在按键排序时创建数组的副本,这是因为Array.Sort对它们的键和值进行排序,这是我们不想要的。 我们不会将密钥(在这种情况下为b )排序到最后。

这就是我们解决您眼前问题的方法。 但是,从评论中收集,您正在尝试对表格数据进行排序。 当您的数据具有某种结构时,请像这样说:

 public class Item { public int A { get; set; } public int B { get; set; } public string C { get; set; } } 

它变得容易多了。

 var items = new[] { new Item {A = 5, B = 4, C = "John"}, new Item {A = 2, B = 1, C = "Peter"}, new Item {A = 3, B = 2, C = "Max"}, }; var sortedItems = items.OrderBy(i => iB).ToArray(); 

这使用LINQ ,它非常适合您尝试的操作。

您可能希望查看元组 ,或者如果可以,使用专用类来保持数据链接在一起,而不是将数据存储在单独的无关联数组中

你能整合数组,使每个项目代表一个完整的记录吗?

 // using anonymous types for simplicity var source = new[] { new { a = 5, b = 4, c = "John" }, new { a = 2, b = 1, c = "Peter" }, new { a = 3, b = 2, c = "Max" } }; var results = source.OrderBy(x => xa); 
 var indices = Enumerable.Range (0, a.Length).ToArray (); var sortedIndices = indices.OrderBy (j => a [j]); var i = 0; foreach (var j in sortedIndices) { anew [i] = a [j]; bnew [i] = b [j]; cnew [i] = c [j]; i++; }