Найти диапазон значений в словаре - PullRequest
3 голосов
/ 02 апреля 2012

У меня есть некоторые данные в этой форме (словарь):

Value0  Text1
Value1  Text2
Value2  Text3
Value3  Text4
Value4  Text5

Теперь мне нужно перебрать массив, который может иметь любые случайные значения.

foreach value in random array
{
    if value is between (value0 && value1)
    console.writeline(Text1)
    if value is between (value1 && value2)
    console.writeline(Text2)
    if value is between (value2 && value3)
    console.writeline(Text3)
    if value is between (value3 && value4)
    console.writeline(Text4)
}

Проблема, с которой я здесь сталкиваюсь, заключается в том, что для каждого значения массива я должен быть в состоянии определить, какой он диапазон (больше значения 0 и меньше значения 1), и, следовательно, получить соответствующий текст. Но словарь не является константой и может иметь любое количество значений, и, следовательно, я не могу это сделать, если условия, как указано выше. (Например, в словаре может быть другая запись Value5 Text6)

что было бы приличным способом сделать это?

1 Ответ

3 голосов
/ 02 апреля 2012

Вы не можете сделать это, используя Dictionary<TKey,TValue>, потому что он не сохраняет элементы в нем в порядке. Но вы можете использовать SortedDictionary<TKey, TValue> (или SortedList<TKey, TValue>) для этого:

TValue GetValue<TKey, TValue>(SortedDictionary<TKey, TValue> dictionary, TKey key)
{
    var comparer = dictionary.Comparer;

    TValue result = default(TValue);

    foreach (var kvp in dictionary)
    {
        if (comparer.Compare(key, kvp.Key) < 0)
            return result;

        result = kvp.Value;
    }

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...