Инициализация массива HashSet <string>, требуется уточнение - PullRequest
1 голос
/ 15 февраля 2020

Я инициализирую что-то вроде этого

    public Dictionary<int, HashSet<string>[]> historgram = new Dictionary<int, HashSet<string>[]>()
    {
        {0, new HashSet<string>[3]},
        {1, new HashSet<string>[3]},
        {2, new HashSet<string>[3]},
    };

I, затем

        if (historgram.TryGetValue(daysAgo, out data))
        {
            if (t.isTestAutomated)
            {
                if (data[0] == null)
                    data[0] = new HashSet<string>();

                data[0].Add(t.id);
            }

Выше работает. Если у меня есть данные для хранения, я инициализирую во время выполнения

Как только все будет сделано, я записываю Json и получаю нулевые значения для тех случаев, когда у меня не было возможности вставить. вот так

"historgram": {
  "0": [ null, null, null ],
  "1": [ null, null, null ],
  "2": [ null, null, null ],
  "3": [ null, null, null ],
  "4": [
    [ "XXXX-2244" ],
    null,
    null
  ],

Вместо этого я бы хотел получить пустое []. Как я могу предварительно инициализировать HashSet, чтобы он сразу был пустым?

1 Ответ

3 голосов
/ 15 февраля 2020

Я бы порекомендовал изменить строку [] на List, чтобы вы могли легко управлять размером от 0 до 3 или более. *

if (historgram.TryGetValue(2, out List<HashSet<string>> data)) 
if (data == null)
{
    data = new List<HashSet<string>>();
    data.Add(new HashSet<string>() { "XXXX-2244" });
}
else
{
    data.Add(new HashSet<string>() { "XXXX-2255" });
}

На этом этапе ваша оригинальная гистограмма также обновляется. Обратите внимание, что данные являются ссылкой на значение ключа вашего словаря.


dynamic output = new ExpandoObject();
output.histogram = historgram;
Console.WriteLine(JsonConvert.SerializeObject(output, Formatting.Indented));

// Generates the following output...
{
  "histogram": {
    "0": [],
    "1": [],
    "2": [
      [
        "XXXX-2255"
      ]
    ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...