хорошо, это работало. что это точно?

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

См. также: SWT: Управление Ресурсами Операционной системы

8
задан p.campbell 24 December 2009 в 03:50
поделиться

6 ответов

MyList.Sort имеет один параметр - функцию, которая отвечает за сравнение элементов, поэтому список может быть отсортировано в соответствии с ним.

Далее: делегат (x, y) определяет саму функцию, которая принимает два параметра типа KeyValuePair [String, Int32] .

Содержимое в скобках {...} - это фактическая логика сравнения:

return x.Value.CompareTo(y.Value);

, которая сравнивает 2 целых значения в соответствии с этим определением .

Таким образом, ваш список будет отсортирован на основе значений этих целых чисел в порядке возрастания.


В C # 3.5 я бы переписал его так:

mylist.Sort((x,y) => x.Value.CompareTo(y.Value));
11
ответ дан 5 December 2019 в 15:24
поделиться

Это функция сортировки, вызываемая в списке, и в нее передается делегат, который вызывается функцией Sort () для фактического сравнения двух элементов.

Страница MSDN о функции http://msdn.microsoft.com/en-us/library/0e743hdt.aspx

0
ответ дан 5 December 2019 в 15:24
поделиться

Подумайте об этом иначе. Допустим, у вас есть метод, который выглядел следующим образом:

public int MyComparisonMethod(KeyValuePair<string, int> x, KeyValuePair<string,int> y)
{
   return x.Value.CompareTo(y.Value);
}

Он в основном принимает два значения и сравнивает их. Он возвращает -1, 0 или 1 в зависимости от того, меньше ли x, равно или больше y соответственно.

Теперь, скрытно, List.Sort использовал алгоритм быстрой сортировки. Все, что вам нужно понять, это то, что он постоянно сравнивает различные элементы в вашем списке друг с другом. Как узнать, больше ли значение a, меньше или равно значению b? Он вызывает этот метод и на основании этого знает. Имеет смысл?

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

0
ответ дан 5 December 2019 в 15:24
поделиться

Просто FYI,

Обычно используется в случае, если вам нужно отсортировать список настраиваемых классов.

Например,

class Student
{
    int rollID;
    string name;
}

List<Student> students = new List<Student>();

...

students.Sort(delegate(Student x, Student y) { return x.rollID.CompareTo(y.rollID);});
0
ответ дан 5 December 2019 в 15:24
поделиться

Это неявно, но, возможно, вам следовало упомянуть объявление вашего "myList". позвольте мне написать это для вас.

var myList=new List<KeyValuePair<string, int>>();

Теперь это означает, что каждый элемент в этом списке является экземпляром KeyValuePair [string, int].

Теперь перейдем к вашему вопросу.

Одна из перегрузок of Sort принимает делегат Comparison, который принимает два элемента коллекции и возвращает целое число.

public delegate int Comparison<T>(T x, T y)

По сути, вы создаете анонимный делегат, который сравнивает два элемента (в вашем случае вы сортируете по «Value», вы даже можете сортировать по «Key»), используя метод «CompareTo» IComparable (строка и int реализует этот интерфейс).

IComparable.CompareTo возвращает целое число (которое используется методом Sort для упорядочивания элементов в вашем списке), указывающее, что lhs меньше (-1), больше (1) или равно ( 0) rhs.

К сведению: если вы работаете над C # 3.0, вам даже не нужен анонимный делегат.

0
ответ дан 5 December 2019 в 15:24
поделиться
myList.Sort //Sort using a your own compare function
  (
    // declare the compare function, returns a int, and receives two items
    delegate(KeyValuePair<String, Int32> x, KeyValuePair<String, Int32> y) 
    {
        // returns a int indicating whether the items are "equal" - equal being what is implemented it the appropriate compare function.
        return x.Value.CompareTo(y.Value);
    }
  );
0
ответ дан 5 December 2019 в 15:24
поделиться
Другие вопросы по тегам:

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