Как я могу отсортировать список на основе свойств T?

В python 3.5+ есть более простой способ получить мелкую копию с помощью оператора ** распаковки. Определено Pep 448 .

>>>dict1 = {"key1": "value1", "key2": "value2"}
>>>dict2 = {**dict1}
>>>print(dict2)
{'key1': 'value1', 'key2': 'value2'}
>>>dict2["key2"] = "WHY?!"
>>>print(dict1)
{'key1': 'value1', 'key2': 'value2'}
>>>print(dict2)
{'key1': 'value1', 'key2': 'WHY?!'}

** распаковывает словарь в новый словарь, который затем присваивается dict2.

Мы также можем подтвердить, что каждый словарь имеет отдельный идентификатор.

>>>id(dict1)
 178192816

>>>id(dict2)
 178192600

Если требуется глубокая копия, то copy.deepcopy () все еще остается в пути.

15
задан mezoid 3 March 2009 в 05:33
поделиться

3 ответа

Используя метод сортировки и лямбда-выражения, это действительно легко.

myList.Sort((a, b) => String.Compare(a.Name, b.Name))

Вышеупомянутые шоу в качестве примера, как отсортировать по свойству Name Вашего типа объекта, беря Имя, имеют строку типа.

26
ответ дан 1 December 2019 в 01:17
поделиться

Если Вы просто хотите Sort() для работы затем необходимо будет реализовать IComparable или IComparable<T> в классе.

Если Вы не возражаете создавать новый список, можно использовать OrderBy/ToList Методы расширения LINQ. Если Вы хотите отсортировать существующий список с более простым синтаксисом, можно добавить несколько дополнительных методов, включив:

list.Sort(item => item.Name);

Например:

public static void Sort<TSource, TValue>(
    this List<TSource> source,
    Func<TSource, TValue> selector)
{
    var comparer = Comparer<TValue>.Default;
    source.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
public  static void SortDescending<TSource, TValue>(
    this List<TSource> source,
    Func<TSource, TValue> selector)
{
    var comparer = Comparer<TValue>.Default;
    source.Sort((x, y) => comparer.Compare(selector(y), selector(x)));
}
8
ответ дан 1 December 2019 в 01:17
поделиться

Необходимо настроить компаратор, который говорит Вид (), как расположить объекты.

Список выезда. Метод сортировки (IComparer) для примера того, как сделать это...

1
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: