基于for循环位置创建Dictionary's键
本文关键字:Dictionary for 循环 位置 创建 基于 | 更新日期: 2023-09-27 18:01:27
我要去一个目录中挑选一些文件,然后将它们添加到Dictionary中。
第一次在循环中,键需要为A,第二次为B,等等。在26/Z之后,数字表示不同的字符,从33开始,从小写字母a开始,直到49,小写字母q。
如果没有大量的if语句说如果i == 1然后键是' a '等等等等,我怎么能保持这段代码整洁?
听起来你只需要保持一个索引,然后一些映射函数:
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);
}