有没有办法返回字符的值,其中键是KeyValuePair或没有迭代的类?

时间:2016-05-10 15:11:28

标签: c# loops dictionary

我不确定我是否设法很好地说出了这个标题,所以让我直接跳到一个例子中: 说我有以下词典:

Dictionary<KeyValuePair<int, string>, float> dict;

现在我创建一个接受int和字符串并返回float的方法。

float GetFloatFromDict(int _int, string _string)
{
    return buttonMappings[new KeyValuePair<int, Gesture>(_controllerNumber, _gesture)];
}

如果我们调用此方法传入1one,并且我们知道存在一个字典条目,其中键是具有这些值的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
}

1 个答案:

答案 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的子类。