如何使用Int删除Double的Dictionary行?

时间:2010-04-16 12:08:01

标签: c# dictionary

我有一个Dictionary对象是使用double作为其关键字形成的。它看起来像这样:

Dictionary<double, ClassName> VariableName = new Dictionary<double, ClassName>();

我使用double作为键类型,因为我需要键看起来像这样:1.1,1.2,2.1,2.2等。

我的系统中的所有内容都很有效,除非我想删除组中的所有键,例如,所有1个值都是1.1,1.2等。

如果我知道密钥的全部值,我可以删除行,例如1.1,但在我的系统中,我只会知道整个数字。

我尝试执行以下操作但收到错误:

DictionaryVariable.Remove(j => Convert.ToInt16(j.Key) == rowToEdit).OrderByDescending(j => j.Key);

是否有通过转换密钥删除每int个值的所有行?

3 个答案:

答案 0 :(得分:6)

首先,考虑使用Decimal而不是Double 。 Double是浮点数,不适合精确比较(这对于键值查找至关重要)。您仍然可以处理1.1或2.2等数字。

其次,你需要的是:

dictionary.Remove(rowToEdit); // where rowToEdit is the
                              // key of the key-value par you want
                              // to remove

编辑:要移除其中rowToEdit为整数且您想要移除rowToEdit <= k < (rowToEdit + 1)

之外的值的值
var removedKeys = x.Keys
    .Where(k => k >= 0 ? Math.Floor(k) : Math.Ceiling(k) == rowToEdit).ToArray();
foreach (var key in removedKeys) dictionary.Remove(key);

答案 1 :(得分:5)

试试这个:

var filter = dictionary.Where(x => x.Key - rowToEdit < 1).ToArray();
foreach (var pair in filter)
{
    dictionary.Remove(pair.Key);
}

答案 2 :(得分:0)

您可以使用LINQ:

var itemsToDelete = from key in dictionary.Keys where ((int)key).Equals(intValueToDelete) select key;
foreach (var keyToDelete in itemsToDelete)
{
    dictionary.Remove(value);
}