1

可能重复:
在 C# 中生成字母表中的字母数组

(仅是理论问题,只是将其视为编写过滤系统(不使用字母表,但让我思考))。

因此,假设我想创建一个包含英文字母表中所有大写字母 (AZ) 以及单词“All”的过滤器列表

All A B C D E ... X Y Z 

并将其转换为List<string>在 C# 中执行此操作的最有效方法,而不使用硬编码{"A","B"}方法。

不是这个问题的重复

上面列出的问题涉及转换为简单的字符数组,这不允许 ALL 部分。并接受它并转换我相信至少需要复制+演员表。

4

5 回答 5

2

对于“最有效”,您将尝试避免使用List<>LINQ。

  var sb = new StringBuilder("All", 26+3 +spare);
  for (char c = 'A'; c <= 'Z'; c++)  sb.Append(c);

  string result = sb.ToString();

但老实说,您必须在这里对各种答案进行基准测试。

于 2012-07-29T22:35:24.840 回答
2

您也可以使用实际字符进行操作:

List<string> characters = new List<string>();

for (char c = 'A'; c <= 'Z'; c++)
    characters.Add("" + c);
于 2012-07-29T20:56:57.490 回答
1

每个字符串字符都是一个char具有数字和 ascii 的值。Capital A 从 65 开始,Captial Z 是 90。因此,您可以使用循环生成值。

List<string> alpha = new List<string>();
for(int i=65; i <=90; i++) {
   alpha.add(""+(char)i);
}

编辑:

您还可以将 for 循环的字符文字用作

for(int i = (int)'A'; i <= (int)'Z'; i++)
于 2012-07-29T20:48:25.957 回答
1

例如:

var alphabet = new List<String>(27);
var capitalRange = Enumerable.Range(0, 26)
    .Select(i => new String(Convert.ToChar(i + 65), 1));
alphabet.AddRange( capitalRange );
alphabet.Add("All");

请注意,具有正确容量的列表的初始化可确保它不需要调整大小并且不会过大。除此之外,这类似于 for 循环。字符串构造函数比 a稍快Char.ToString()

于 2012-07-29T20:52:08.247 回答
0

这是一种相当紧凑的方法:

var list = new[] { "All" }.Concat(
    Enumerable.Range('A', 'Z' - 'A' + 1)
    .Select(c => ((char)c).ToString())
).ToList();

但是这样的东西更干净(IMO)并且更高效,因为没有调整大小:

const char start_ch = 'A';
const char end_ch = 'Z';

var list = new List<string>(end_ch - start_ch + 1) { "All" };

for (char ch = start_ch; ch <= end_ch; ++ch)
    list.Add(ch.ToString());

你到底打算用这个做List什么?例如,使用关联数据结构(例如HashSetor )可以更有效地完成搜索Dictionary

于 2012-07-29T21:36:21.880 回答