如何在C#中获取连续字符?

15 浏览
0 Comments

如何在C#中获取连续字符?

我有一个List MyList=new 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".....

以此类推

我不知道如何做到这一点。

请使用任何方法(如LINQLAMBDA Expression)帮助我完成。

0
0 Comments

最近我在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"开始。

0
0 Comments

如何在C#中获得连续字符?

这个问题的出现是因为有人想要在C#中生成连续的字符序列。虽然有类似的问题存在,但还不足以标记为重复问题,而且这个问题本身也不容易搜索到。

解决方法是使用任何一个可行的IEnumerable答案(或者至少覆盖你所需范围的答案),然后如果你需要创建一个具有特定元素数量的列表,只需使用以下代码:

List list = GenerateSequence().Take(count).ToList();

这并不是问题的真正答案。如果你认识到这实际上是Excel的工作原理,那么它是一个容易搜索到的问题,可以尝试搜索"excel column char"或类似的关键词。

有人对这个解决方法提出了异议,认为它不是问题的答案。但是某些情况下,如果你点击Jon给出的链接,你会看到几个关于如何以特定方式生成字符串的答案。唯一缺少的部分就是Jon在这里添加的".Take().ToList()"。

最后,Jon对此表示道歉,并承认没有在阅读相关问题的答案之前发表评论。在链接问题中的答案确实非常相似。

0
0 Comments

问题原因:用户想要在C#中获取连续的字符,但不清楚如何实现。

解决方法:用户提供了几种实现连续字符的方法。首先,可以使用迭代器来生成连续的字符串。用户提供了两个方法,一个是生成字母表的方法,另一个是生成字符串的方法。通过使用嵌套的foreach循环,可以生成无限数量的字符串。第二种方法是使用递归函数来实现。通过传入一个索引值,函数可以返回对应索引位置的字符串。用户还提供了使用LINQ方法来生成字符串的示例。通过在循环中使用yield return语句,可以生成无限数量的字符串。

第一个方法:

public IEnumerable GenerateStrings()
{
    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);
}
List strings = Enumerable.Range(0, 1000)
    .Select(x => GetString(x))
    .ToList();

第三个方法:

public IEnumerable GenerateStrings()
{
    int index = 0;
    while (true)
    {
        yield return GetString(index++);
    }
}
List strings = GenerateStrings().Take(1000).ToList();

以上是用户提供的几种实现连续字符的方法。根据用户的描述,这些方法都可以实现获取连续字符的目的。

0