/// <summary>キーと値のペアを用いてマップ型変数を生成します。</summary>
/// <param name="values">キーと値のペア</param>
/// <returns>入力データに対応するマップ型変数</returns>
public static QiMap <K, V> Create(IEnumerable <KeyValuePair <K, V> > values)
{
if (!values.Any())
{
throw new InvalidOperationException("values length must be greater than 0");
}
//中身のシグネチャ揃ってるかどうか検証
var pf = values.First();
var ksig = pf.Key.Signature;
var vsig = pf.Value.Signature;
if (values.Any(pair => (pair.Key.Signature != ksig || pair.Value.Signature != vsig)))
{
throw new InvalidOperationException("key or values type is inconsistent");
}
string sig = QiSignatures.TypeMapBegin + ksig + vsig + QiSignatures.TypeMapEnd;
var map = QiValue.Create(sig);
foreach (var pair in values)
{
map[pair.Key.QiValue] = pair.Value.QiValue;
}
return(new QiMap <K, V>(map, sig));
}