Там какой-либо простой способ состоит в том, чтобы отсортировать NameValueCollection на основе ключа в C#?

Вы можете создать свой собственный компаратор.

Comparator<Student> comparator = new Comparator<Student>()
{
    @Override
    public int compare(Student o1, Student o2)
    {
        int index1 = list1.indexOf(o1.getName());
        int index2 = list1.indexOf(o2.getName());

        return Integer.compare(index1 , index2 );
    }
};

и чем сортировать:)

java.util.Collections.sort(yourList, comparator);
6
задан 9 March 2009 в 19:59
поделиться

2 ответа

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

public static void Sort(this NameValueCollection nameValueCollection)
    {
        // Create a temporary collection the same size as the original
        NameValueCollection tempNameValueCollection = new NameValueCollection(nameValueCollection.Count);

        // Sort the keys
        string[] keys = nameValueCollection.AllKeys;
        Array.Sort(keys);

        foreach (string key in keys)
        {
            // Sort the values
            string[] values = nameValueCollection[key].Split(',');
            Array.Sort(values);

            // Add each value to the temporary collection
            foreach (string value in values)
            {
                tempNameValueCollection.Add(key, value);
            }
        }

        // Clear the original collection
        nameValueCollection.Clear();

        // Add the sorted entries back
        nameValueCollection.Add(tempNameValueCollection);
    }
2
ответ дан 8 December 2019 в 16:10
поделиться

Запустите с SortedDictionary<string,string> или SortedList<string,string> и Вы уже там...

Если Вы нуждаетесь в нескольких объектах на ключ, то рассматриваете a SortedDictionary<string,List<string>>. Существуют способы упростить дополнение и т.д. с дополнительными методами - это не должно быть страшно.

Отметьте также это NameValueCollection нечувствительно к регистру, таким образом, Вы, возможно, должны были бы использовать одно из нечувствительных сравнений - например:

Dictionary<string,string> data = new Dictionary<string,string>(
            StringComparer.InvariantCultureIgnoreCase);

(редактирование) здесь является примером использования дополнительного метода для заполнения нескольких значений против единственного ключа в C# 3.0:

    static void Main()
    {
        var data = new Dictionary<string, List<string>>(
            StringComparer.InvariantCultureIgnoreCase);
        data.Add("abc", "def");
        data.Add("abc", "ghi");
    }

    static void Add<TKey, TValue>(this IDictionary<TKey, List<TValue>> lookup,
        TKey key, TValue value)
    {
        List<TValue> list;
        if (!lookup.TryGetValue(key, out list))
        {
            list = new List<TValue>();
            lookup.Add(key, list);
        }
        list.Add(value);
    }
13
ответ дан 8 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

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