2013-09-23 3 views
5

Я имеет строковый массив объявить нижесортировать массив строк с помощью 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();

, но этот вид изменит последовательность строкового массива. Предположим, что данные [0] являются именем магазина, но после сортировки он становится адресом хранилища.
У любого есть идея, как я могу сортировать запись? Пожалуйста, помогите

+5

Это кажется немного сложным для такой простой вещи. Просто создайте класс/struct для хранения ваших данных и создания массива из этого. Гораздо проще сортировать и обрабатывать. –

+0

Использование массива данных для отображения –

ответ

21

Вы можете использовать это, чтобы отсортировать массив имен (который хранится в 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<T>:

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)); 

Это будет иметь аналогичную производительность метода Array.Sort, однако, это гораздо лучший вариант, если вы должны иметь возможность добавлять или удалять элементы из своего списка динамически.

Смежные вопросы