Вы можете создать очень упрощенный многозадачный словарь, который автоматизирует процесс вставки таких значений:
public class MultiDictionary<TKey, TValue> : Dictionary<TKey, List<TValue>>
{
public void Add(TKey key, TValue value)
{
if (TryGetValue(key, out List<TValue> valueList)) {
valueList.Add(value);
} else {
Add(key, new List<TValue> { value });
}
}
}
Это создает перегруженную версию метода Add
. Исходный позволяет вам вставить список элементов для ключа, если для этой записи еще нет записи. Эта версия позволяет вставить один элемент в любом случае.
Вам нужно поместить символы, которые вы хотите разбить, в класс символов, который сообщает обработчику регулярных выражений, что "любой из этих символов является совпадением". Для ваших целей это будет выглядеть так:
date.split(/[.,\/ -]/)
Несмотря на то, что тире имеют особое значение в классах символов в качестве спецификатора диапазона (например, [az]
означает то же, что и [abcdefghijklmnopqrstuvwxyz]
), если вы поместите его как последнее в классе, оно будет означать буквальное тире, и его не нужно экранировать.
Чтобы объяснить, почему ваш шаблон не работает, /-./
сообщает обработчику регулярных выражений, чтобы он соответствовал буквальному символу дефиса, за которым следует любой символ (точки являются подстановочными знаками в обычные выражения). С «25-02-2010» он будет разделяться каждый раз, когда встречается «-2», потому что тире соответствует, а точка соответствует «2».