我正在寻找一种有效的方法来获取包含所有英语(拉丁语)字符的列表。
A, B, C, .... , Z
我真的不想要像这样的构造函数:
// nasty way to create list of English alphabet
List<string> list = new List<string>();
list.Add("A");
list.Add("B");
....
list.Add("Z");
// use the list
...
如果你对如何使用这个问题感兴趣,我正在创建一个bin-tree机制。
答案 0 :(得分:13)
您可以使用for
循环执行此操作:
List<char> list = new List<char>();
for (char c = 'A'; c <= 'Z'; ++c) {
list.Add(c);
}
如果您想要List<string>
而不是List<char>
使用list.Add(c.ToString());
。
请注意,这只是因为字母A - Z出现在Unicode的连续序列中(代码点65到90)。相同的方法不一定适用于其他字母表。
答案 1 :(得分:9)
下面:
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
此字符串是字符列表。
使用ToCharArray
或LINQ ToList
转换为您选择的可枚举项,但您已经可以通过字符串的Chars
索引器访问每个项目。
答案 2 :(得分:4)
使用LINQ
int charactersCount = 'Z' - 'A' + 1;
IList<char> all = Enumerable.Range('A', charactersCount)
.Union(Enumerable.Range('a', charactersCount))
.Select(i => (char)i)
.ToList();
答案 3 :(得分:2)
没有内置的方法来获取与每个字符对应的字符串列表。您可以使用以下代码获取IEnumerable,这可能适合您的目的。您也可以在from部分中坚持使用数组。
var letters = from letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()
select letter.ToString();
答案 4 :(得分:1)
这是我的解决方案(最终)
const string driveLetters = "DEFGHIJKLMNOPQRSTUVWXYZ";
List<string> allDrives = new List<string>(driveLetters.Length);
allDrives = (from letter
in driveLetters.ToCharArray()
select letter).ToList();
我最终得到了这个解决方案,因为最初我的目标是在Windows中创建所有可用驱动器的列表。这是实际的代码:
const string driveLetters = "DEFGHIJKLMNOPQRSTUVWXYZ";
const string driveNameTrails = @":\";
List<string> allDrives = (from letter
in driveLetters.ToCharArray()
select letter + driveNameTrails).ToList();
return allDrives;
答案 5 :(得分:0)
最简单的方法 -
int start = (int) 'A';
int end = (int) 'Z';
List<char> letters = new List<char>();
for (int i = start; i <= end; i++)
{
letters.Add((char)i);
}
同样但代码更少 -
IEnumerable<char> linqLetters = Enumerable.Range(start, end - start + 1).Select(t => (char)t);