Создание ключа словаря на основе позиции цикла for - PullRequest
4 голосов
/ 05 июля 2011

Я иду в каталог, собирая некоторые файлы и затем добавляя их в словарь.

В первый раз в цикле ключ должен быть A, второй раз B и т. Д. После 26 / Zчисло представляет разные символы, и начиная с 33, оно начинается со строчной буквы до 49, которая является строчной q.

Без массивного оператора if, чтобы сказать, что если i == 1, то ключ - это "A" и т. д. и т. д. как я могуможете сохранить этот код в чистоте?

Ответы [ 4 ]

4 голосов
/ 05 июля 2011

Звучит так, как будто вам просто нужно сохранить индекс того, где вы должны, а затем некоторую функцию отображения:

int index = 0;
foreach (...)
{
    ...
    string key = MapIndexToKey(index);
    dictionary[key] = value;
    index++;
}

...

// Keys as per comments
private static readonly List<string> Keys =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopq"
    .Select(x => x.ToString())
    .ToList();

// This doesn't really need to be a separate method at the moment, but
// it means it's flexible for future expansion.
private static string MapIndexToKey(int index)
{
    return Keys[index];
}

РЕДАКТИРОВАТЬ: я обновил метод MapIndexToKey, чтобы сделать его проще. Непонятно, зачем вам строковый ключ, если вы используете только один символ, хотя ...

Другое редактирование: я думаю, что вы могли бы просто использовать:

string key = ((char) (index + 'A')).ToString();

вместо того, чтобы вообще иметь функцию отображения, учитывая ваши требования, так как символы смежны в порядке Юникода от 'A' ...

1 голос
/ 05 июля 2011

Это дает вам возможность отобразить буквы на определенные цифры, возможно, не в алфавитном порядке.

    var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        .Select((chr, index) => new {character =  chr, index = index + 1 });

     foreach(var letter in letters)
     {
         int index = letter.index;
         char chr =  letter.character;
                // do something
     }
1 голос
/ 05 июля 2011

Продолжайте увеличивать с 101 до 132, игнорируя пропущенную последовательность, и конвертируйте их в символы.http://www.asciitable.com/

Используйте напоминание (разделите на 132), чтобы определить второй цикл

0 голосов
/ 05 июля 2011

Как насчет:

for(int i=0; i<26; ++i)
{
    dict[(char)('A'+ (i % 26))] = GetValueFor(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...