Сортировка составного набора

Существует 5 случаев использования подчеркивания в Python.

  1. Для хранения значения последнего выражения в интерпретаторе.
  2. Для игнорирования конкретных значений. (так называемое «мне все равно»)
  3. Чтобы указать специальные значения и функции для имени vartiables или функций.
  4. Использовать как «Интернационализация (i18n)» или « Локализация (l10n) '.
  5. Отделить цифры числа буквенного значения.

Здесь - хорошая статья с примерами mingrammer .

7
задан nvoigt 30 September 2016 в 14:22
поделиться

3 ответа

Обновление: Я нашел намного более изящное решение:

class MyCompositeObject
{
    DateTime    CreatedDate;
    string      SomeAttribute;
    Object      Obj1;
{
class MyCompositeObjects : List<MyCompositeObject> { }

Я нашел это из-за отражения, определенный тип, сохраненный в Obj1, разрешен во времени выполнения и типе, определенный DataTemplate применяется как ожидалось!

1
ответ дан 7 December 2019 в 16:47
поделиться

Я еще не очень знаком с WPF, но я рассматриваю это как вопрос о сортировке и фильтрации List<T> наборы.

(необходимость скручивания жгутов вручную реализовать вид или фильтр)

Вы пересмотрели бы реализацию Вашего собственного вида или функций фильтра? По моему опыту, это просто в использовании. Примеры ниже используют анонимного делегата, но Вы могли легко определить свой собственный метод или класс для реализации сложного вида или фильтра. Такой класс мог даже иметь свойства, чтобы настроить и изменить вид и фильтр динамично.

Использовать List<T>.Sort(Comparison<T> comparison) с Вашим пользовательским сравнивают функцию:

// Sort according to the value of SomeAttribute
List<MyCompositeObject> myList = ...;
myList.Sort(delegate(MyCompositeObject a, MyCompositeObject b) 
{
    // return -1 if a < b
    // return 0 if a == b
    // return 1 if a > b
    return a.SomeAttribute.CompareTo(b.SomeAttribute);
};

Аналогичный подход для получения поднабора объектов из списка.

Использовать List<T>.FindAll(Predicate<T> match) с Вашей пользовательской функцией фильтра:

// Select all objects where myObjectType1 and myObjectType2 are not null
myList.FindAll(delegate(MyCompositeObject a)
{
    // return true to include 'a' in the sub-collection
    return (a.myObjectType1 != null) && (a.myObjectType2 != null);
}
1
ответ дан 7 December 2019 в 16:47
поделиться

Метод "Грубой силы", который Вы упоминаете, является на самом деле идеальным решением. Обратите внимание, все объекты находятся в RAM, нет никакого узкого места ввода-вывода, таким образом, можно в значительной степени отсортировать и отфильтровать миллионы объектов в меньше, чем секунда на любом современном компьютере.

Самым изящным способом работать с наборами является Система. Пространство имен Linq в.NET 3.5

Спасибо - я также рассмотрел LINQ к объектам, но мое беспокойство, там потеря гибкости для введенных шаблонов данных, которые я должен отобразить объекты в своем списке.

Если Вы не можете предсказать в данный момент, как люди отсортируют и отфильтруют Ваш объектный набор, то необходимо посмотреть на Систему. Linq. Пространство имен выражений для создания лямбда-выражений по требованию во время времени выполнения (сначала Вы позволяете пользователю для создания выражения затем скомпилируйте, работайте, и в конце Вы используете пространство имен отражения для перечисления через результаты). Это более хитро для обертывания головы вокруг этого, но неоценимой функции, вероятно (мне окончательно) еще больше инновационной функции, чем сам LINQ.

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

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