使用LINQ排序字符串数组

Bub*_*Bub 5 c# linq asp.net

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

string[][] data = new string[3][];
string[] name = new string[10];
string[] contact = new string[10];
string[] address = new string[10];
Run Code Online (Sandbox Code Playgroud)

在我将数据填充到名称,地址和联系人之后,地址在某些数据中可以是空字符串.之后我将其分配给字符串数组数据.

data[0] = name;
data[1] = contact;
data[2] = address
Run Code Online (Sandbox Code Playgroud)

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

但这种方式会改变字符串数组的顺序.假设data [0]是商店名称,但在排序后它变成商店地址.
任何人都知道如何对记录进行排序?请帮忙

p.s*_*w.g 24

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

data[0] = data[0].OrderBy(x => x).ToArray();
Run Code Online (Sandbox Code Playgroud)

但是,这将导致存储在其他数组中的数据与名称数组失去任何有意义的相关性(例如,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; }
}
Run Code Online (Sandbox Code Playgroud)

要声明数组,请使用:

MyClass[] data = new MyClass[10];
data[0] = new MyClass   // Populate first record
{
    Name = "...",
    Contact = "...",
    Address = "...",
};
Run Code Online (Sandbox Code Playgroud)

并对数组进行排序:

data = data.OrderBy(x => x.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)

或这个:

Array.Sort(data, (x, y) => x.Name.CompareTo(y.Name));
Run Code Online (Sandbox Code Playgroud)

第二个选项更有效,因为它重新排列了元素,并且不需要分配新数组来存储结果.

或者,使用List<T>:

List<MyClass> data = new List<MyClass>(10);
data.Add(new MyClass   // Populate first record
{
    Name = "...",
    Contact = "...",
    Address = "...",
});
Run Code Online (Sandbox Code Playgroud)

并对列表进行排序:

data.Sort((x, y) => x.Name.CompareTo(y.Name));
Run Code Online (Sandbox Code Playgroud)

这将具有与该Array.Sort方法类似的性能,但是,如果您需要能够动态地添加或删除列表中的元素,则它是一个更好的选择.