如何在C#中获取连续字符?
如何在C#中获取连续字符?
我有一个List
我需要用n个值填充列表MyList
。
如果n的值是2,那么列表MyList
将包含"A","B"
如果是10,则为"A","B","C"....."J"
如果是30,则为"A"....."Z","AA","AB",AC","AD"
如果是1000,则为"A",....."Z","AA","AB"......"AZ","BA","BB"......."BZ"........"YZ","AAA",AAB".....
以此类推
我不知道如何做到这一点。
请使用任何方法(如LINQ
或LAMBDA Expression
)帮助我完成。
最近我在SQL中做了一个类似的事情。将其转化为C#的函数如下:
public static string GetCode(int id) { string code, chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if (id <= chars.Length) { code = chars.Substring(id - 1, 1); } else { id--; int value = chars.Length, adder = 0; while (id >= value * (chars.Length + 1) + adder) { adder += value; value *= chars.Length; } code = chars.Substring((id - adder) / value - 1, 1); id = ((id - adder) % value); while (value > 1) { value /= chars.Length; code += chars.Substring(id / value, 1); id = id % value; } } return code; }
然后你只需要从1开始的数字,将其转换成代码:
var codes = Enumerable.Range(1, 1000).Select(n => GetCode(n));
该函数的限制目前为"ZZZZZZ"或321272406(之后会出现除以零的情况)。
请注意,该函数使用了所有的组合,并返回"A".."Z"、"AA".."ZZ"、"AAA"..."ZZZ",而不是从"AB"和"ABC"开始。
如何在C#中获得连续字符?
这个问题的出现是因为有人想要在C#中生成连续的字符序列。虽然有类似的问题存在,但还不足以标记为重复问题,而且这个问题本身也不容易搜索到。
解决方法是使用任何一个可行的IEnumerable
List
这并不是问题的真正答案。如果你认识到这实际上是Excel的工作原理,那么它是一个容易搜索到的问题,可以尝试搜索"excel column char"或类似的关键词。
有人对这个解决方法提出了异议,认为它不是问题的答案。但是某些情况下,如果你点击Jon给出的链接,你会看到几个关于如何以特定方式生成字符串的答案。唯一缺少的部分就是Jon在这里添加的".Take().ToList()"。
最后,Jon对此表示道歉,并承认没有在阅读相关问题的答案之前发表评论。在链接问题中的答案确实非常相似。
问题原因:用户想要在C#中获取连续的字符,但不清楚如何实现。
解决方法:用户提供了几种实现连续字符的方法。首先,可以使用迭代器来生成连续的字符串。用户提供了两个方法,一个是生成字母表的方法,另一个是生成字符串的方法。通过使用嵌套的foreach循环,可以生成无限数量的字符串。第二种方法是使用递归函数来实现。通过传入一个索引值,函数可以返回对应索引位置的字符串。用户还提供了使用LINQ方法来生成字符串的示例。通过在循环中使用yield return语句,可以生成无限数量的字符串。
第一个方法:
public IEnumerableGenerateStrings() { foreach(string character in Alphabet()) { yield return character; } foreach (string prefix in GenerateStrings()) { foreach(string suffix in Alphabet()) { yield return prefix + suffix; } } } public IEnumerable Alphabet() { for(int i = 0; i < 26; i++) { yield return ((char)('A' + i)).ToString(); } }
第二个方法:
string GetString(int index) { if (index < 26) { return ((char)('A' + index)).ToString(); } return GetString(index / 26 - 1) + GetString(index % 26); } Liststrings = Enumerable.Range(0, 1000) .Select(x => GetString(x)) .ToList();
第三个方法:
public IEnumerableGenerateStrings() { int index = 0; while (true) { yield return GetString(index++); } } List strings = GenerateStrings().Take(1000).ToList();
以上是用户提供的几种实现连续字符的方法。根据用户的描述,这些方法都可以实现获取连续字符的目的。