基于for循环位置创建Dictionary's键

本文关键字:Dictionary for 循环 位置 创建 基于 | 更新日期: 2023-09-27 18:01:27

我要去一个目录中挑选一些文件,然后将它们添加到Dictionary中。

第一次在循环中,键需要为A,第二次为B,等等。在26/Z之后,数字表示不同的字符,从33开始,从小写字母a开始,直到49,小写字母q。

如果没有大量的if语句说如果i == 1然后键是' a '等等等等,我怎么能保持这段代码整洁?

基于for循环位置创建Dictionary's键

听起来你只需要保持一个索引,然后一些映射函数:

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();

而不是有映射函数,根据您的要求,因为字符是连续的Unicode顺序从'A'…

继续从101递增到132,忽略缺失的序列,并将它们转换为字符。http://www.asciitable.com/

使用提醒(除以132)来识别第二个循环

这使您有机会将字母映射到特定的数字,可能不是按字母顺序排列的。

    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
     }

如何:

for(int i=0; i<26; ++i)
{
    dict[(char)('A'+ (i % 26))] = GetValueFor(i);
}