Я хочу, чтобы в моем классе возвращался список из словаря, но разрешалась пользовательская сортировка с использованием предварительно написанных методов сравнения. В моем исходном Java-коде, из которого я конвертирую, я создал методы сравнения с использованием Google Guava Ordering в своем классе, а затем у меня был один метод, называемый следующей передачей в одном из общедоступных методов компаратора, объявленный примерно так:
public List<Word> getWords(Comparator c) { }
Я пытаюсь воссоздать это на С#, но я не могу понять, как это сделать. По сути, в приведенном ниже коде вы можете видеть, что есть три версии для каждого типа сортировки, и, кроме того, я создаю два списка для каждого возвращаемого значения, что кажется немного расточительным.
Я посмотрел на создание делегатов, но немного потерялся, затем подумал, что могу создать IComparable, но затем увидел IComparator, а затем увидел, что метод Sort принимает Comparator.
Может ли кто-нибудь указать мне, как наилучшим образом преобразовать это в единый вид «GetWords», позволяя клиентам вызывать GetWords, извлекая отсортированный список из предварительно предоставленного набора заказов.
public partial class WordTable
{
private Dictionary<string, Word> words;
public WordTable()
{
//for testing
words = new Dictionary<string, Word>();
words.Add("B", new Word("B", WordTypes.Adjective));
words.Add("A", new Word("A", WordTypes.Noun));
words.Add("D", new Word("D", WordTypes.Verb));
}
public List<Word> GetWords()
{
return words.Values.ToList();
}
public List<Word> GetWordsByName()
{
List<Word> list = words.Values.ToList<Word>();
return list.OrderBy(word => word.Name).ToList();
}
public List<Word> GetWordsByType()
{
List<Word> list = words.Values.ToList<Word>();
return list.OrderBy(word => word.Type).ToList();
}
}
Comparator
в нескольких местах в тексте или на самом делеComparer
? - person Dialecticus   schedule 17.10.2018