我不确定我是否设法很好地说出了这个标题,所以让我直接跳到一个例子中: 说我有以下词典:
Dictionary<KeyValuePair<int, string>, float> dict;
现在我创建一个接受int和字符串并返回float的方法。
float GetFloatFromDict(int _int, string _string)
{
return buttonMappings[new KeyValuePair<int, Gesture>(_controllerNumber, _gesture)];
}
如果我们调用此方法传入1
和one
,并且我们知道存在一个字典条目,其中键是具有这些值的KeyValuePair,它不起作用,因为我们需要创建一个新对象,它不会与字典中的任何现有对象相同。
是否可以这样做,但让它搜索带有值的键而无需手动迭代?
有没有比以下更好的方法呢?还有一种很好的方法来处理找到合适的条目吗?
float GetFloatFromDict(int _int, string _string)
{
foreach(KeyValuePair<int, string> _key in dict.Keys)
{
if(_key.Key == _int && _key.Value == _String)
{
return dict[_key];
}
}
//If nothing found, return some float
}
答案 0 :(得分:0)
来自<xsl:import href="http://www.xsltfunctions.com/xsl/functx-1.0-doc-2007-01.xsl"/>
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:key match="foo" use="concat(key1, '|', key2)" name="group"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="foo">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<pos>
<xsl:value-of select="functx:index-of-node(key('group', concat(key1, '|', key2)), current())"/>
</pos>
</xsl:copy>
</xsl:template>
的文档:
Dictionary需要一个相等的实现 确定键是否相等。您可以指定实现 IEqualityComparer泛型接口使用的构造函数 接受比较器参数;如果您没有指定实现, 默认的通用相等比较器EqualityComparer.Default是 用过的。如果类型TKey实现System.IEquatable泛型 接口,默认的相等比较器使用该实现。
因此,您应该创建自定义IEqualityComparer并将其传递给Dictionary或使用实现IEquatable的KeyValuePair的子类。