更改 Int Array C# 中给定索引处的值

Change value at given index in Int Array C#

我正在尝试创建一个进程来计算给定输入字符串中每个字母的出现频率。到目前为止,我的代码似乎工作正常,除了更新 int 数组中给定索引处的 int 值。当我调试代码时,它成功地找到了与当前字符对应的字符串数组的索引,因此问题似乎出在以下行:alphabetCount[index] = alphabetCount[index]++;

这是代码。

    string[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    int[] alphabetCount = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    string baseInput = string.Empty;

    private void button_count1_Click(object sender, EventArgs e)
    {
        baseInput = textBox_base.Text.ToUpper();
        int length = baseInput.Length;

        for (int i = 0; i < length; i++)
        {
            try
            {
                int index = Array.IndexOf(alphabet,baseInput[i].ToString());
                alphabetCount[index] = alphabetCount[index]++;
            }
            catch
            {
                //MessageBox.Show("nope");
            }
        }
    }

问题是 alphabetCount[index]++ 首先赋值 alphabetCount[index] 然后递增该值。您需要改用预增量运算符:

alphabetCount[index] = ++alphabetCount[index];

您可以像这样简单地重现此行为:

var arr = new int[2];
arr[0] = arr[0]++;

Console.Write(arr[0]); // 0

您只需写 alphabetCount[index]++;alphabetCount[index] = alphabetCount[index]+1;(等价)

或者你使用 linq:

string words = "Hello World";
Dictionary<char, int> counted = words.ToUpper().GroupBy(ch => ch).OrderBy(g => g.Key).ToDictionary(g => g.Key, g => g.Count());

您可以简化计数器。

int[] alphabetCount =
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
string baseInput = string.Empty;

private void button_count1_Click(object sender, EventArgs e)
{
    baseInput = textBox_base.Text.ToUpper();

    foreach(var character in baseInput)
    {
        if(char.IsLetter(baseInput))
        {
            // A is ASCII 65, Z is ASCII 90
            // Subtract 65 to put it in the alphabetCount range
            var index = character - 65;
            alphabetCount[index]++;
        }
    }
}