public Map SetKeyValues(IList<object> keys, IList<object> newvalues)
{
object[] newvals = new object[this.values.Length];
Array.Copy(this.values, newvals, this.values.Length);
for (int k = 0; k < keys.Count; k++)
{
object key = keys[k];
int position = ((IList<object>)this.keys).IndexOf(key);
if (position < 0)
throw new InvalidOperationException(string.Format("undefined key {0}", key));
newvals[position] = newvalues[k];
}
return new Map(this.keys, newvals);
}
public void SetKeyValues() { Map map = new Map(new object[] { new Atom("a"), new Atom("b"), new Atom("c") }, new object[] { 1, 2, 3 }); Map newmap = map.SetKeyValues(new object[] { new Atom("c"), new Atom("a") }, new object[] { 4, 5 }); Assert.AreEqual(1, map.GetValue(new Atom("a"))); Assert.AreEqual(2, map.GetValue(new Atom("b"))); Assert.AreEqual(3, map.GetValue(new Atom("c"))); Assert.AreEqual(5, newmap.GetValue(new Atom("a"))); Assert.AreEqual(2, newmap.GetValue(new Atom("b"))); Assert.AreEqual(4, newmap.GetValue(new Atom("c"))); }