如何使用“AAAAAA”到“ZZZZZZ”中的值按顺序初始化c#中的字符串数组

时间:2016-02-28 15:17:41

标签: c# arrays

我想轻松预先填充单个字符串数组,我将其称为“字母”,其值为:

AAAAAA
AAAAAB
AAAAAC
AAAAAD
..
..
ZZZZZX
ZZZZZY
ZZZZZZ

按顺序提供1.65亿种组合。

我的想法是,我需要能够要求6个字符的任何特定组合,例如BBCHHJ和使用Array.Index来返回它所在的数组元素。

我有点第二位:

    String searchFor;
    Console.Write("Enter a string value to search for: ");
    searchFor = Console.ReadLine();
    int indexValue = Array.IndexOf(letters, searchFor);

    Console.WriteLine("The value you are after is in element index: " + indexValue);
    Console.ReadLine();

但我不知道如何按顺序使用所有这些组合轻松初始化字母数组!

3 个答案:

答案 0 :(得分:3)

Jakub的答案的变化应该更高效:

int result = s
    .Select(c => c - 'A')                              // map 'A'-'Z' to 0-25
    .Aggregate(0, (total, next) => total * 26 + next); // calculate the base 26 value

这样做的好处是可以避免使用Reverse和单独的Sum,并且在每次迭代中都不必从头开始计算26的幂。

答案 1 :(得分:1)

在数组中存储3.08亿个元素并搜索它们不是最佳解决方案,而是在运行时计算索引。我创建了一个代码示例:

string input = "ZZZZZZ";

//default values
string alphabets_s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] alphabets = alphabets_s.ToCharArray();

int result = 1; //starting with "one" because zero will make everything zero

//calculating index
for (int i = 0; i < input.Length; i++)
{       
    //get character index and add "1" to avoid multiplication with "0"
    int index = Array.IndexOf(alphabets, input[i]) + 1;

    //multiply it with the current result
    result *= index;
}

//subtract 1 from final result, because we started it with 1
result--;

PS:我做了基本的测试,如果您发现任何问题,请通知我。

答案 2 :(得分:0)

正如我在评论中所写的那样,你想要达到的目标基本上是从26号码转换。

第一步是将字符串转换为数字列表。然后乘以26的幂并加在一起:

var s = "AAAABB";
var result = s
    .Select(c => c - 'A') //map characters to numbers: A -> 0, B -> 1 etc
    .Reverse()            //reverse the sequence to have the least significant digit first
    .Select((d, i) => d * Math.Pow(26, i))
    .Sum();