我要去一个目录,拿起一些文件,然后将它们添加到字典中。
第一次在循环中,键需要是A,第二次是B等.Afer 26 / Z数字表示不同的字符,从33开始,它以小写字母a开头,最多49字,小写q。
如果i == 1没有大量的if语句,那么Key就是'A'等等我怎样才能保持这段代码的整洁?
答案 0 :(得分:4)
听起来你只需要保留你所到之处的索引,然后是一些映射函数:
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'连续...
答案 1 :(得分:1)
继续从101递增到132,忽略丢失的序列,并将它们转换为字符。 http://www.asciitable.com/
使用提醒(除以132)来识别第二个循环
答案 2 :(得分:1)
这使您有机会将字母映射到特定数字,可能不是字母顺序。
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
}
答案 3 :(得分:0)
怎么样:
for(int i=0; i<26; ++i)
{
dict[(char)('A'+ (i % 26))] = GetValueFor(i);
}