2016-02-28 86 views
2

初始化在C#中的字符串數組值從「AAAAAA」到「ZZZZZZ」我不想輕易預先填充一維字符串數組,我打電話「字母」的價值觀:我如何才能

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(); 

但我不知道如何輕鬆地初始化數組字母與所有這些組合,以便!

+1

爲什麼要存儲所有可能的組合?爲什麼不在運行時計算它? – Shaharyar

+1

該問題可以簡化爲將基數26的數字轉換爲基數10.不需要浪費千兆字節的內存來存儲字符串。 –

+0

我不介意這樣做,雖然我不知道如何去做這件事! –

回答

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:我也只是基本的測試,請告訴我,如果你發現任何錯誤在裏面。

+0

似乎運作良好。 –

+0

AAAAAA給我0 –

+0

數組是從0開始的@CraigSargent – rene

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(); 
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的冪。

+0

是的,這是很好的答案。 – Shaharyar