C# 从子类递增数组
我试图为文本文件中找到的每个字符递增数组,但当我尝试使用+1、+=、或++递增数组时,会收到一条消息,表示运算符“++”不能应用于“CharacterFrequency”类型的操作数。我也不能使用int[]进行此操作 提前感谢您提供的任何指导C# 从子类递增数组,c#,C#,我试图为文本文件中找到的每个字符递增数组,但当我尝试使用+1、+=、或++递增数组时,会收到一条消息,表示运算符“++”不能应用于“CharacterFrequency”类型的操作数。我也不能使用int[]进行此操作 提前感谢您提供的任何指导 string s = File.ReadAllText("wap.txt"); CharacterFrequency[] count = new CharacterFrequency[(int)char.MaxValue]; foreach (char
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接口的一个示例。这是一个使代码更具可读性的有趣概念。