Den sidste kode er lidt svaer at gennemskue.
Men her nogle ideer til problemet skitseret i selve spoergsmaalet.
using System;
using System.Collections.Generic;
using System.Linq;
namespace E
{
public class Program
{
private static void Dump(Dictionary<string, List<string>> data)
{
foreach(KeyValuePair<string, List<string>> entry in data)
{
Console.WriteLine(entry.Key + ":");
foreach(string name in entry.Value)
{
Console.WriteLine(" " + name);
}
}
}
public static void Main(string[] args)
{
Dictionary<string, List<string>> data = new Dictionary<string, List<string>>();
data.Add("Piger", new List<string> { "Sofie", "Charlotte", "Helle" });
data.Add("Drenge", new List<string> { "Hans", "Jørgen" });
Dump(data);
data.Keys.ToList().ForEach(key => data[key].Remove("Helle"));
Dump(data);
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
namespace E
{
public class SpecialData<T1,T2>
{
private Dictionary<T1, List<T2>> data1 = new Dictionary<T1, List<T2>>();
private Dictionary<T2, List<T1>> data2 = new Dictionary<T2, List<T1>>();
public void Add(T1 key, List<T2> val)
{
data1.Add(key, val);
foreach(T2 oneval in val)
{
if(!data2.ContainsKey(oneval))
{
data2.Add(oneval, new List<T1>());
}
data2[oneval].Add(key);
}
}
public void Remove1(T1 key)
{
foreach(T2 oneval in data1[key])
{
data2.Remove(oneval);
}
data1.Remove(key);
}
public void Remove2(T2 oneval)
{
foreach(T1 key in data2[oneval])
{
data1[key].Remove(oneval);
}
data2.Remove(oneval);
}
public void Dump()
{
foreach(KeyValuePair<T1, List<T2>> entry in data1)
{
Console.WriteLine("{0}:", entry.Key);
foreach(T2 oneval in entry.Value)
{
Console.WriteLine(" {0}", oneval);
}
}
}
}
public class Program
{
public static void Main(string[] args)
{
SpecialData<string, string> data = new SpecialData<string, string>();
data.Add("Piger", new List<string> { "Sofie", "Charlotte", "Helle" });
data.Add("Drenge", new List<string> { "Hans", "Jørgen" });
data.Dump();
data.Remove2("Helle");
data.Dump();
Console.ReadKey();
}
}
}