C# 使用LINQ对字符串数组排序

C# 使用LINQ对字符串数组排序,c#,asp.net,linq,C#,Asp.net,Linq,我有一个字符串数组声明如下 string[][] data = new string[3][]; string[] name = new string[10]; string[] contact = new string[10]; string[] address = new string[10]; 在我将数据填入姓名、地址和联系人之后,地址可以是某些数据中的空字符串。之后,我将其分配给字符串数组数据 data[0] = name; data[1] = contact; data[2] = a

我有一个字符串数组声明如下

string[][] data = new string[3][];
string[] name = new string[10];
string[] contact = new string[10];
string[] address = new string[10];
在我将数据填入姓名、地址和联系人之后,地址可以是某些数据中的空字符串。之后,我将其分配给字符串数组数据

data[0] = name;
data[1] = contact;
data[2] = address
如何使用LINQ按名称对字符串数组进行排序。我试着 data=data.orderby(y=>y[0]).ToArray()

但是这种排序会改变字符串数组的顺序。假设数据[0]是存储名称,但排序后成为存储地址。

有人知道我该如何整理这张唱片吗?请帮助

您可以使用它对名称数组(存储在
数据[0]
中)进行排序:

但是,这将导致存储在其他数组中的数据与名称数组失去任何有意义的关联(例如,
name[3]
很可能与
contact[3]
不匹配)。为了避免这种情况,, 我强烈建议使用类来存储此信息:

class MyClass // TODO: come up with a better name
{
    public string Name { get; set; }
    public string Contact { get; set; }
    public string Address { get; set; }
}
要声明数组,请使用:

MyClass[] data = new MyClass[10];
data[0] = new MyClass   // Populate first record
{
    Name = "...",
    Contact = "...",
    Address = "...",
};
要对数组进行排序,请执行以下操作:

data = data.OrderBy(x => x.Name).ToArray();
或者这个:

Array.Sort(data, (x, y) => x.Name.CompareTo(y.Name));
第二个选项更有效,因为它在适当的位置重新排列元素,并且不需要分配新的数组来存储结果

或者,使用:


这将具有类似于
数组.Sort
方法的性能,但是,如果您需要能够动态地从列表中添加或删除元素,那么它是一个更好的选择。

对于这样一个简单的事情来说,这似乎有点复杂。只需创建一个类/结构来保存数据,并从中创建一个数组。排序和处理要容易得多。使用数据数组列出
Array.Sort(data, (x, y) => x.Name.CompareTo(y.Name));
List<MyClass> data = new List<MyClass>(10);
data.Add(new MyClass   // Populate first record
{
    Name = "...",
    Contact = "...",
    Address = "...",
});
data.Sort((x, y) => x.Name.CompareTo(y.Name));