我有一个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
个值的所有行?
答案 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);
}