У меня есть вложенный открытый класс KeyCountMap
public KeyCountMap<T>
{
private IDictionary<T, MutableInt> map = new Dictionary<T, MutableInt>();
public KeyCountMap()
{ }
public KeyCountMap(Type dictionaryType)
{
if (!typeof(IDictionary<T, MutableInt>).IsAssignableFrom(dictionaryType))
{
throw new ArgumentException("Type must be a IDictionary<T, MutableInt>", "dictionaryType");
}
map = (IDictionary<T, MutableInt>)Activator.CreateInstance(_dictionaryType);
}
public HashSet<KeyValuePair<T, MutableInt>> EntrySet()
{
return map.ToSet();
}
//... rest of the methods...
}
Чтобы отсортировать значения на карте в порядке убывания значений, если мы используем Java, мы можем написать метод как:
public static <T> KeyCountMap<T> sortMapByDescendValue(KeyCountMap<T> map)
{
List<Entry<T, MutableInt>> list = new LinkedList<>(map.entrySet());
Collections.sort(list, new Comparator<Entry<T, MutableInt>>()
{
@Override
public int compare(Entry<T, MutableInt> o1, Entry<T, MutableInt> o2)
{
return (-1) * (o1.getValue().get()).compareTo(o2.getValue().get());
}
});
KeyCountMap<T> result = new KeyCountMap<T>();
for (Entry<T, MutableInt> entry : list)
{
result.put(entry.getKey(), entry.getValue());
}
return result;
}
Если мы используем C#, мы можем определить метод как:
public static KeyCountMap<T> SortMapByDescendValue<T>(KeyCountMap<T> map)
{
List<KeyValuePair<T, MutableInt>> list = new List<KeyValuePair<T, MutableInt>>(map.EntrySet());
// map.EntrySet() returns of type HashSet<KeyValuePair<T, MutableInt>>
list = list.OrderByDescending(x => x.Value).ToList();
KeyCountMap<T> result = new KeyCountMap<T>();
foreach (KeyValuePair<T, MutableInt> entry in list)
{
result.Put(entry.Key, entry.Value);
}
return result;
}
Будет ли этот метод работать или необходимо переопределить метод CompareTo()
(здесь не используется) для сортировки?
ИЗМЕНИТЬ
public class MutableInt
{
internal int _value = 1; // note that we start at 1 since we're counting
public void Increment()
{
_value++;
}
public void Discrement()
{
_value--;
}
public int Get()
{
return _value;
}
}
SortedSet
(msdn.microsoft. com/en-us/library/dd412070(v=vs.110).aspx). 14.06.2016Dictionary
, используйте его. Вам нуженList
, используйте один. Я предлагаю вам прочитать о различиях между ними. Словарь — это не список. 14.06.2016SortMapByDescendValue()
имеет типKeyCountMap<T>
, тогда как сортировка выполняется с использованиемList
, поэтому проблема заключается в параметре типаKeyCountMap<T>
, который является классом, использующимDictionary
14.06.2016.CompareTo
переопределяете вопрос, то есть, как если бы мы использовали это так же, какCollections.sort(list, new Comparator<Entry<T, MutableInt>>()
this в java 14.06.2016