2013-04-29 3 views
1

Как я могу сортировать массив в массиве объектов с помощью ключа элемента?Сортировка объекта с ключом массива в массиве объектов

Пожалуйста, смотрите изображение для получения дополнительной информации: Array in object Array

Так, например, в картине вы можете увидеть у нас есть 8 объект сейчас, поэтому мы хотим, чтобы отсортировать 8 объект с ключом в новом массиве на примере сортировки 8 объекта с " parentId "ключ в массиве или" categoryName "ключ в массиве !!!

Но я думаю, что у нас есть проблема, потому что мы не можем получить доступ к ключу в новом массиве !!!

Так что я думаю, что этот код не может помочь мне:

Array.Sort.... 

Теперь, как я могу сортировать объект с ключом массива, как это?

Сердечные приветы

ответ

2

Это не очевидно из вашего вопроса, но массив, который вы хотите сортировать, по-видимому, содержит словари, которые представляют экземпляры объектов, имея один и тот же набор ключей. Чтобы получить доступ к значениям, вам нужно указать элементы массива в правильный тип словаря (я предполагаю, что это Dictionary<String, String>). Затем вы можете использовать LINQ для сортировки с помощью предложения OrderBy:

var sortedByCategoryName = result 
    .Cast<IDictionary<String, String>>() 
    .OrderBy(d => d["categoryName"]); 

Сортировку будет базироваться вокруг строки сортировки, так как значения строк. Тем не менее, если вы хотите сортировать по сказать parentId (это число) сначала необходимо выполнить преобразование:

var sortedByParentId = result 
    .Cast<IDictionary<String, String>>() 
    .OrderBy(d => Int32.Parse(d["parentId"])); 

Обратите внимание, что приведенный выше код будет бросать исключение, если либо ключ отсутствует в словаре или, во втором примере, если значение не может быть проанализировано как целое число.

+0

@ Martin Liversage: Спасибо за информацию, я люблю использовать с вашего код, но у меня есть проблема !!! Я использую как это: 'IDictionary >()' Я не могу использовать, и у меня есть проблема с этим кодом: '.OrderBy (d => Int32.Parse (d [" parentId "])); ' не может конвертировать из 'CookComputing.XmlRpc.XmlRpcStruct' в 'string' у вас есть идеи? – Sam

+1

@Sam: Я не знаю о 'XmlRpcStruct', и единственным источником информации о ваших структурах данных является скриншот. Однако вы можете попытаться выполнить 'results.Cast ()'. Я предполагаю, что «XmlRpcStruct» - это тип, подобный словарю, и, возможно, тип, который вы храните в массиве. –

+0

@ Martin Liversage: ДА, это работа: D спасибо за помощь – Sam

2

Если вы используете Lists вы можете сортировать так:

List<objectName> yourList = yourArray.TypeOf<objectName>().ToList(); 
yourList.Sort((x,y) => x.yourKey.CompareTo(y.yourKey)); 
+0

да, но только я могу использовать из массива для получения результата! – Sam

+2

@Sam ... затем поместите ваш массив в список. –

+0

Там вы идете, массив преобразован в список ... –

1

если вы используете LINQ вы можете сделать несколько уровней сортировки

using System.Linq; 

и

Array result = new Array(from item in your array order by item.parentId, item.categoryName select item); 
Смежные вопросы