You could try something like this:
internal class Cat{
public string category;
public string sub;
}
static void Main(string[] args)
{
string[] categories = {
"Category1/SubType1",
"Category1/SubType2",
"Category1/SubType3",
"Category1/SubType4",
"Category2/SubType1",
"Category2/SubType2",
"Category2/SubType3",
"Category2/SubType4",
"Category3",
"Category4",
"Category4/SubType1",
"Category4/SubType2"};
Dictionary<string, List<Cat>> categoryDict = categories.Select(c => c.Split('/'))
.Select(a => new Cat()
{
category = a[0],
sub = a.Length > 1 ? a[1] : string.Empty
})
.GroupBy(b => b.category)
.ToDictionary(e => e.Key, e => e.ToList());
}