C# 从子类递增数组

C# 从子类递增数组,c#,C#,我试图为文本文件中找到的每个字符递增数组,但当我尝试使用+1、+=、或++递增数组时,会收到一条消息,表示运算符“++”不能应用于“CharacterFrequency”类型的操作数。我也不能使用int[]进行此操作 提前感谢您提供的任何指导 string s = File.ReadAllText("wap.txt"); CharacterFrequency[] count = new CharacterFrequency[(int)char.MaxValue]; foreach (char

我试图为文本文件中找到的每个字符递增数组,但当我尝试使用+1、+=、或++递增数组时,会收到一条消息,表示运算符“++”不能应用于“CharacterFrequency”类型的操作数。我也不能使用int[]进行此操作

提前感谢您提供的任何指导

string s = File.ReadAllText("wap.txt");
CharacterFrequency[] count = new CharacterFrequency[(int)char.MaxValue];

foreach (char t in s)
{

   count[t]++;
}
预期的结果是数组保存文本文件中每个唯一字符的匹配项。例如count[]={A,A,B,c}

我的角色频率等级:

class CharacterFrequency
{
  public int Frequency { get; set; }
  public char Char { get; set; }

public override string ToString()
{
  return $"Character: {Char} Frequency: {Frequency}";
}

您可以简单地执行以下操作:

string s = File.ReadAllText("wap.txt");
int[] count = new int[(int)char.MaxValue];

foreach (char t in s)
{
   count[t]++; // or count[(int)t] ++;
}
更新代码:

您可以像这样声明对象数组:

CharacterFrequency[] count = new CharacterFrequency[(int)char.MaxValue];

for (int i=0;i < count.Length; i++)
{ count[i] = new CharacterFrequency();}
最终代码。共有128个ASCII字符:

CharacterFrequency[] count = new CharacterFrequency[128];

for (int i=0;i < count.Length; i++)
{ count[i] = new CharacterFrequency();}

foreach (char t in s)
{
    if (count[t].Char == '\0')
    {
        count[t].Char = t;
        count[t].Frequency = 1;
    }
    else count[t].Frequency++;
 }

您可以简单地执行以下操作:

string s = File.ReadAllText("wap.txt");
int[] count = new int[(int)char.MaxValue];

foreach (char t in s)
{
   count[t]++; // or count[(int)t] ++;
}
更新代码:

您可以像这样声明对象数组:

CharacterFrequency[] count = new CharacterFrequency[(int)char.MaxValue];

for (int i=0;i < count.Length; i++)
{ count[i] = new CharacterFrequency();}
最终代码。共有128个ASCII字符:

CharacterFrequency[] count = new CharacterFrequency[128];

for (int i=0;i < count.Length; i++)
{ count[i] = new CharacterFrequency();}

foreach (char t in s)
{
    if (count[t].Char == '\0')
    {
        count[t].Char = t;
        count[t].Frequency = 1;
    }
    else count[t].Frequency++;
 }

您需要访问并增加频率属性:

count[t].Frequency++;
请注意,此时您有一个空值数组,因此在尝试上面的代码之前,应该依次初始化每个项,否则您将得到一个NullReferenceException


计数[0]=新字符频率;将实例化第一项。

您需要访问并增加频率属性:

count[t].Frequency++;
请注意,此时您有一个空值数组,因此在尝试上面的代码之前,应该依次初始化每个项,否则您将得到一个NullReferenceException


计数[0]=新字符频率;将实例化第一项。

显然,您的问题是需要添加频率参考:

count[t].Frequency++; 
然而,因为这是学术性的,所以您也可以使用Linq来实现这一点

优点是,该文件中只有一个字符列表,而且仍然相当高效:

var count = File.ReadAllText("wap.txt")
                .ToCharArray()
                .GroupBy(x => x)
                .Select(x => new CharacterFrequency() { Char = x.Key, Frequency = x.Count() })
                .ToArray();

foreach (var item in count)
   Console.WriteLine($"{item.Char} {item.Frequency}");

额外资源

打开一个文本文件,将文件中的所有文本读入字符串,然后 然后关闭文件

将此实例中的字符复制到Unicode字符数组

对序列的元素进行分组

从IEnumerable创建数组

从IEnumerable创建字典

$special字符将字符串文字标识为插值字符 一串插值字符串是可能包含以下内容的字符串文字 插值表达式。当插值字符串解析为 结果字符串中,带有插值表达式的项将替换为 表达式结果的字符串表示形式


显然,您的问题是需要添加频率参考:

count[t].Frequency++; 
然而,因为这是学术性的,所以您也可以使用Linq来实现这一点

优点是,该文件中只有一个字符列表,而且仍然相当高效:

var count = File.ReadAllText("wap.txt")
                .ToCharArray()
                .GroupBy(x => x)
                .Select(x => new CharacterFrequency() { Char = x.Key, Frequency = x.Count() })
                .ToArray();

foreach (var item in count)
   Console.WriteLine($"{item.Char} {item.Frequency}");

额外资源

打开一个文本文件,将文件中的所有文本读入字符串,然后 然后关闭文件

将此实例中的字符复制到Unicode字符数组

对序列的元素进行分组

从IEnumerable创建数组

从IEnumerable创建字典

$special字符将字符串文字标识为插值字符 一串插值字符串是可能包含以下内容的字符串文字 插值表达式。当插值字符串解析为 结果字符串中,带有插值表达式的项将替换为 表达式结果的字符串表示形式



CharacterFrequency不是整数。该类看起来如何?我按照您的要求添加了第二个类。为什么您要使用数组存储要递增的值,不能只计算整数?不,很遗憾,我的老师要求我使用CharacterFrequency[]。所以您要计算每个唯一字符在文件中出现的次数?或者您需要返回文本文件中出现的每个唯一字符?CharacterFrequency不是整数。该类看起来如何?我按照您的要求添加了第二个类。为什么您要使用数组存储要递增的值,不能仅计算整数?不,很遗憾,我的老师要求我使用CharacterFrequency[]因此,您要计算每个唯一字符在文件中出现的次数吗?或者您需要返回文本文件中出现的每个唯一字符?对于我的作业,我的老师不希望我使用int数组。很抱歉,我应该提到这一点。当使用CharacterFrecuency对象初始化数组时,不要忘记初始化属性Char,我相信:as Char=chari现在我遇到了一个我感到困惑的问题。当我运行它时,它创建了一个无限循环,但是按照foreach应该如何工作的过程,我不明白为什么。我相信。char.MaxValue=65535。因此,初始化数组需要一段时间,您可以将其更改为CharacterFrequency[]count=new CharacterFrequency[128];对于128个ascii字符,我的作业老师不希望我使用整数数组。很抱歉,我应该提到这一点。当使用CharacterFrecuency ob初始化数组时
对象,不要忘记初始化属性Char,我相信:as Char=chari现在我遇到了一个我感到困惑的问题。当我运行它时,它创建了一个无限循环,但是按照foreach应该如何工作的过程,我不明白为什么。我相信。char.MaxValue=65535。因此,初始化数组需要一段时间,您可以将其更改为CharacterFrequency[]count=new CharacterFrequency[128];对于128个ascii字符,LINQ表达式是fluent接口的一个示例。这是一个使代码更具可读性的有趣概念。Linq表达式是fluent接口的一个示例。这是一个使代码更具可读性的有趣概念。