Как удалить строку словаря, которая является двойной, используя Int? - PullRequest
1 голос
/ 16 апреля 2010

У меня есть 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 ]

6 голосов
/ 16 апреля 2010

Во-первых, рассмотрите возможность использования десятичного числа вместо двойного . Double - это число с плавающей запятой, и оно не подходит для точных сравнений (что важно для поиска по значению ключа). Вы по-прежнему сможете обрабатывать числа, такие как 1.1 или 2.2.

Во-вторых, вам нужно:

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

EDIT : чтобы удалить значения, где 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);
5 голосов
/ 16 апреля 2010

Попробуйте это:

var filter = dictionary.Where(x => x.Key - rowToEdit < 1).ToArray();
foreach (var pair in filter)
{
    dictionary.Remove(pair.Key);
}
0 голосов
/ 16 апреля 2010

Вы можете использовать LINQ:

var itemsToDelete = from key in dictionary.Keys where ((int)key).Equals(intValueToDelete) select key;
foreach (var keyToDelete in itemsToDelete)
{
    dictionary.Remove(value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...