Câu hỏi Tạo một mảng các chữ cái trong bảng chữ cái


Có một cách dễ dàng để tạo ra một mảng có chứa các chữ cái của bảng chữ cái trong C #? Nó không phải là quá khó để làm điều đó bằng tay, nhưng tôi đã tự hỏi nếu có một cách xây dựng trong cách để làm điều này.


75
2017-11-24 15:25


gốc


FYI, câu hỏi này đã được hỏi trước với quốc tế hóa trong tâm trí. - Serge Wautier
tôi không thể tin rằng nó không phải là bài tập về nhà ... - Steven A. Lowe
Không chỉ là một trong những câu hỏi mà tôi tự hỏi liệu có cách nào tốt hơn không. :) - Helephant
có thể trùng lặp Nội địa hóa: Làm cách nào để ánh xạ thông tin văn hóa thành tên tập lệnh hoặc phạm vi ký tự Unicode? - Johan
Đảo ngược có thể được tìm thấy ở đây stackoverflow.com/a/667902/2343 - Sameer


Các câu trả lời:


Tôi không nghĩ rằng có một cách được xây dựng trong, nhưng tôi nghĩ rằng dễ nhất sẽ là

  char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

170
2017-11-24 15:29



Nó cũng hoạt động trên các bảng chữ cái khác, miễn là bạn đặt chuỗi trong một tài nguyên :) - Olmo
Điều này hoạt động tuyệt vời! Cảm ơn! - guanome
Đây là cách tốt nhất nếu bạn muốn đảm bảo rằng mã của bạn hoạt động trên các máy có các ngôn ngữ khác nhau. Nếu không, nếu bạn tự động tạo bảng chữ cái (như các câu trả lời khác dưới đây), bạn có thể kết thúc bằng một bảng chữ cái khác trên các máy khác nhau. - Luis
Đôi khi câu trả lời đơn giản là tốt nhất. - Dave Clarke


C # 3.0:

char[] az = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToArray();
foreach (var c in az)
{
    Console.WriteLine(c);
}

có nó không hoạt động ngay cả khi quá tải chỉ của Enumerable.Range chấp nhận tham số int ;-)


86
2017-11-24 15:39



Tôi thực sự thích câu trả lời này. Tôi không biết về Enumerable.Range (). Tôi chọn cách thủ công cho câu trả lời được chấp nhận bởi vì có vẻ như nó sẽ dễ dàng hơn và nhanh hơn nhưng tôi ước tôi cũng có thể chọn câu trả lời này. Cám ơn vì sự gợi ý. - Helephant
Câu trả lời hay, tôi thực sự thích điều này. - Doctor Jones
Wowie kazowie! Đó là chỉ là ưa thích. Có lẽ là quá ưa thích cho ứng dụng này, nhưng nó có rất nhiều tiềm năng cho các kịch bản phức tạp hơn. - Michael Meadows
'z' - 'a' + 1 = Nó trông thực sự vụng về, nhưng tôi không thể nhìn thấy một cách xung quanh nó :( - CasperT
@CasperT: Có thể Enumerable.Range('a', 26) - abatishchev


for (char letter = 'A'; letter <= 'Z'; letter++)
{
     Debug.WriteLine(letter);
}

42
2017-08-11 04:50



lol tôi biết câu trả lời này là một tuổi, nhưng điều này là tuyệt vời, tôi không có ý tưởng này là có thể, cảm ơn! - Thousand


char[] alphabet = Enumerable.Range('A', 26).Select(x => (char)x).ToArray();

27
2018-02-14 02:56



Tôi nghĩ đây là giải pháp tốt nhất vì bạn có thể sử dụng phương pháp này để tạo một mảng các số nguyên và chữ thường. Đây phải là câu trả lời được chấp nhận :) - Kapé
@PopCatalin đã có câu trả lời đúng đầu tiên, nhưng đây là cách tiếp cận tôi đã đi với. Đó là một chút dễ dàng hơn để làm theo những gì đang xảy ra, và thông tin duy nhất nó giả định bạn biết là bảng chữ cái chứa 26 ký tự ('A' .. 'Z'), mà tôi tin là hợp lý. - Mass Dot Net


Tôi đã viết điều này để lấy mã MS excel (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) dựa trên chỉ mục dựa trên 1. (Tất nhiên, chuyển sang không dựa trên chỉ đơn giản là rời khỏi column--; khi bắt đầu.)

public static String getColumnNameFromIndex(int column)
{
    column--;
    String col = Convert.ToString((char)('A' + (column % 26)));
    while (column >= 26)
    {
        column = (column / 26) -1;
        col = Convert.ToString((char)('A' + (column % 26))) + col;
    }
    return col;
}

17
2018-03-11 10:43



Oh này, chỉ cần thay thế Convert.ToString với String.valueOf làm cho nó hoạt động trong Java :) - Nyerguds
Làm thế nào về getIndexFromColumnName? - oneiros
imparator ở đây bạn đi stackoverflow.com/a/667902/2343 - Sameer
Rất đẹp. Tôi đã vật lộn với điều này trong một thời gian dài cho đến khi tôi tìm thấy giải pháp của bạn. - Andrew


Giả sử bạn có nghĩa là các chữ cái trong bảng chữ cái tiếng Anh ...

    for ( int i = 0; i < 26; i++ )
    {
        Console.WriteLine( Convert.ToChar( i + 65 ) );
    }
    Console.WriteLine( "Press any key to continue." );
    Console.ReadKey();

13
2017-11-24 15:36



Tốt hơn nên sử dụng (int) 'A' thay vì mã hóa cứng 65. Nó sẽ làm cho mã dễ đọc hơn và ít bị lỗi hơn. - Mehrdad Afshari
Nice - Tôi cũng không nghĩ đến điều đó - xan
Tuy nhiên, trong mã hóa hàng đầu, trong đó 'A'! = 65, (EBCDIC), A đến Z không phải là phần tiếp theo. - James Curran
James: C # ký tự là UTF-16. - Mehrdad Afshari
Không giống như một mảng với tôi. - Lightness Races in Orbit


Bạn có thể làm một cái gì đó như thế này, dựa trên các giá trị ascii của các ký tự:

char[26] alphabet;

for(int i = 0; i <26; i++)
{
     alphabet[i] = (char)(i+65); //65 is the offset for capital A in the ascaii table
}

(Xem bảng đây.) Bạn chỉ đang truyền từ giá trị int của ký tự đến giá trị ký tự - nhưng, chỉ hoạt động đối với các ký tự ascii chứ không phải các ngôn ngữ khác nhau, v.v.

CHỈNH SỬA: Theo đề xuất của Mehrdad trong nhận xét cho một giải pháp tương tự, tốt hơn là làm điều này:

alphabet[i] = (char)(i+(int)('A'));

Thao tác này gán ký tự A cho giá trị int của nó và sau đó tăng dựa trên điều này, vì vậy nó không được mã hóa cứng.


5
2017-11-24 15:35



Mã này có lỗi nhỏ. i = 0 đến <27 bao gồm 27 ký tự (phần tử mảng 0, sau đó phần tử từ 1 đến 26). - Brian
Tôi rõ ràng là chỉnh sửa này khi bạn đăng :). - xan
Bạn có thể làm cho nó tốt hơn nữa: bảng chữ cái [i] = (char) (i + 'A'); Cùng một kết quả - CasperT
Không phải là char[] alphabet = new char[26];? - Shishir Gupta