Я опытный разработчик PHP, переходящий на C #.В настоящее время я работаю над приложением Windows Forms.
В своих поисках я обнаружил, что C # не поддерживает ассоциативные массивы так же свободно, как PHP.Я нашел информацию о словаре и кое-что о «структурах», которые кажутся объектами классов.
Проблема, с которой я сталкиваюсь, заключается в том, чтобы свести в голову не только ассоциативный массив, но и многомерный, который я хочуиспользуется для хранения нескольких счетчиков в серии циклов.
Приложение читает текстовый файл журнала, ищет предопределенную строку, вытаскивает дату в этой строке, когда строка найдена, и увеличивает счетчик дляэто совпадение строк на эту дату.
В PHP это было бы так просто:
// Initialize
$count_array[$string_date][$string_keyword] = 0;
...
// if string is found
$count_array[$string_date][$string_keyword] += 1;
...
// To ouput contents of array
foreach($count_array as $date -> $keyword_count_array) {
echo $date; // output date
foreach($keyword_count_array as $keyword -> $count) {
echo $keyword . ": " . $count;
}
}
Кажется, что он немного больше вовлечен в C # (что неплохо)вещь).Я попытался использовать предложение, которое я нашел по другому подобному вопросу, но я действительно не следую, как увеличивать или итерировать / выводить содержимое:
// Initialize
var count_array = new Dictionary<string, Dictionary<string, int>>();
count_array = null;
...
// if string is found - I think the second reference is supposed to be a Dictionary object??
count_array[string_date.ToShortDateString()][string_keyword]++;
...
// To ouput contents of "array"
foreach (KeyValuePair<string, Dictionary<string, int>> kvp in exportArray)
{
foreach(KeyValuePair<string, int> kvp2 in kvp.Value)
{
MessageBox.Show(kvp.Key + " - " + kvp2.Key + " = " + kvp2.Value);
}
}
Я даже на правильном пути?Или у кого-то есть лучший / более чистый метод имитации приведенного выше PHP-кода?
ОБНОВЛЕНИЕ
При использовании приведенного выше кода C # я действительно получаю сообщение об ошибке "// если строка найдена "строка.Ошибка: «Ссылка на объект не установлена для экземпляра объекта».Я предполагаю, что это потому, что у меня есть строка в ссылочной секции, а не объект Dictionary.Так что сейчас я не уверен, как увеличить.
ОБНОВЛЕНИЕ 2
Спасибо всем за ваше время.Текущий код теперь работает благодаря пониманию работы словаря.Однако все советы относительно использования классов и объектов для этой ситуации также не потеряны.Я могу рефакторинг для удовлетворения.