使用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] = address
我如何使用LINQ按名称对字符串数组进行排序。 我尝试data = data.orderby(y => y [0])。ToArray();
但是这种方式会改变字符串数组的顺序。 假设data [0]是商店名称,但在排序后它变成商店地址。
任何人都知道如何对记录进行排序? 请帮忙
您可以使用它来对名称数组(存储在data[0]
)进行排序:
data[0] = data[0].OrderBy(x => x).ToArray();
但是,这将导致存储在其他数组中的数据与名称数组失去任何有意义的相关性(例如, 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));
第二个选项更有效,因为它重新排列了元素,并且不需要分配新数组来存储结果。
或者,使用List
:
List data = new List (10); data.Add(new MyClass // Populate first record { Name = "...", Contact = "...", Address = "...", });
并对列表进行排序:
data.Sort((x, y) => x.Name.CompareTo(y.Name));
这将具有与Array.Sort
方法类似的性能,但是,如果您需要能够动态地添加或删除列表中的元素,那么它是一个更好的选择。