Изменение массива в Dictionary

264
02 апреля 2017, 01:24

Здравствуйте!
Есть код:

class test
{
    //variables
    internal Dictionary<string, int[]> MyDict = new Dictionary<string, int[]>();
    //construction
    public test()
    {
        MyDict.Add("test", new int[0]);
    }
    //add method
    internal void AddNewElement(string dictString, int a)
    {
        //copy
        int[] values = MyDict[dictString];
        //resize
        Array.Resize(ref values, values.Length + 1);
        //add new value
        values[values.Length - 1] = a;
        //save ?!
        MyDict[dictString] = values;
    }
}

Подскажите, как бы Вы реализовали метод AddNewElement()?

Answer 1

Массивы -- это "статическая" структура данных, не подразумевающая изменение размера (т.е. добавление и удаление элементов).

Используйте список:

Dictionary<string, List[]> MyDict = new Dictionary<string, List[]>();
internal void AddNewElement(string dictString, int a)
{
    List[] values = MyDict[dictString];
    values.Add(a);
    // стоит однако проверять, что список для такого ключа уже существует
}
Answer 2
class IntArraysDictionary
{
    private Dictionary<String, Int32[]> _dictionary;
    public IntArraysDictionary()
    {
        this._dictionary = new Dictionary<String, Int32[]>();
    }
    public Int32[] Add(String key, Int32[] intArray)
    {
        if(this._dictionary.Keys.Contains(key))
        {
            this._dictionary[key] = intArray;
            return intArray;
        }
        this._dictionary.Add(key, intArray);
        return intArray;
    }
}

Есть такой вариант. Обратите внимание на именование класса, методов и переменных, а также на то, что инициализацию всех полей класса (его состояние) лучше производить непосредственно в конструкторе.

READ ALSO
Чем различаются указатели в Си от ссылок в C#?

Чем различаются указатели в Си от ссылок в C#?

Верно ли, что указатели в Си аналогичны ссылочным типам в C#?

430
Смена фона нескольких страниц в wpf

Смена фона нескольких страниц в wpf

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

345
Vk audio Api. Загрузка аудио на сервер c#

Vk audio Api. Загрузка аудио на сервер c#

Доброго времени суток, понадобилось мне загрузить аудио в вк, нашел апи https://vkcom/dev/audio

654
Необработанное исключение типа &ldquo;System.NullReferenceException&rdquo;

Необработанное исключение типа “System.NullReferenceException”

При компиляции вылазит ошибка:

376