Как упорядочить список классов по ключу словаря внутри класса, используя OrderBy? - PullRequest
0 голосов
/ 16 октября 2018

Как упорядочить список классов по ключу словаря внутри класса, например ...

List<City> cities;

Public Class City
{
    public Dictionary<string, string> CityAttributes;
}

В этом сценарии я хочу упорядочить список cities по определенной строке всловарь CityAttributes.

например Лондон Париж Нью-Йорк

В каждом городе есть словарь CityAttribute ...

<"Population over 6 million", "Yes">
<"Radius more than 15 miles", "No">
<"Currency","Euro">

Я хочу упорядочить города по Валюте.Полученный список будет: Нью-Йорк Париж Лондон

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вы можете отсортировать его следующим образом: OrderBy для заказа со значением CityAttributes

cityList.Select(k => k.CityAttributes.OrderBy(x => x.Value)).ToList();

Ваш случай,

public static void Main()
{       
    var cityAttrib1 = new Dictionary<string, string>()
    {
        { "1", "Capital City"},
        { "2", "High Population"},
        { "3", "Good Transportation"}
    };

    var cityAttrib2 = new Dictionary<string, string>()
    {
        { "1", "Not a Capital City"},
        { "2", "Low Population"},
        { "3", "Poor Transportation"}
    };

    var city1 = new City { CityAttributes = cityAttrib1 };
    var city2 = new City { CityAttributes = cityAttrib2 };

    var list = new List<City> { city1, city2 };

    var sortedList = list.Select(k => k.CityAttributes.OrderBy(x => x.Value)).ToList();

    //Print the sorted output
    foreach(var item in sortedList)
    {
        foreach(KeyValuePair<string, string> entry in item)
        {
                Console.WriteLine(entry.Value); 
        }
        Console.WriteLine(Environment.NewLine);
    }
}

public class City
{
    public Dictionary<string, string> CityAttributes { get; set; }
}
0 голосов
/ 16 октября 2018

Вы используете Orderq Линка следующим образом:

cities.OrderBy(city => city.CityAttributes["Currency"]);

Если вы не хотите использовать лямбду, но что-то более читабельное, вы также можете сделать это:

var orderedCities = from city in cities
                    orderby city.CityAttributes["Currency"]
                    select city;

Редактировать: Хорошее место, чтобы начать читать на linq это https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...