Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表函数,如何获得每个名称的平均分数-c#控制台应用程序_C#_List_Console Application_Average - Fatal编程技术网

列表函数,如何获得每个名称的平均分数-c#控制台应用程序

列表函数,如何获得每个名称的平均分数-c#控制台应用程序,c#,list,console-application,average,C#,List,Console Application,Average,我在C#上的控制台应用程序上有一个列表函数。此列表函数有不同的项,它们看起来像'matt、5''matt、7''jack、4''jack、8'等 我希望能够组合所有的名字,我只看到他们的名字写了一次,但他们后面的数字是平均的,所以这就像'jack,5+7/2',然后显示为'jack,6' 到目前为止我有这个 currentFileReader = new StreamReader(file); List<string> AverageList = new List<string

我在C#上的控制台应用程序上有一个列表函数。此列表函数有不同的项,它们看起来像
'matt、5''matt、7''jack、4''jack、8'

我希望能够组合所有的名字,我只看到他们的名字写了一次,但他们后面的数字是平均的,所以这就像
'jack,5+7/2'
,然后显示为
'jack,6'

到目前为止我有这个

currentFileReader = new StreamReader(file);
List<string> AverageList = new List<string>();
while (!currentFileReader.EndOfStream)
{
    string text = currentFileReader.ReadLine();
    AverageList.Add(text.ToString());
}
AverageList.GroupBy(n => n).Any(c => c.Count() > 1);
currentFileReader=新的StreamReader(文件);
List AverageList=新列表();
而(!currentFileReader.EndOfStream)
{
string text=currentFileReader.ReadLine();
Add(text.ToString());
}
GroupBy(n=>n).Any(c=>c.Count()>1);

我真的不知道从这里到哪里去

您需要将
上的每个字符串项拆分为
,然后按返回数组的第一个元素和数组的平均第二个元素分组(将其解析为
int
),如下所示:

List<string> AverageList = new List<string> { "matt,5", "matt,7", "jack,4", "jack,8" };
var query = AverageList.Select(s => s.Split(','))
    .GroupBy(sp => sp[0])
    .Select(grp =>
        new
        {
            Name = grp.Key,
            Avg = grp.Average(t=> int.Parse(t[1])),
        });
foreach (var item in query)
{
    Console.WriteLine("Name: {0}, Avg: {1}", item.Name, item.Avg);
}
但是,更好的选择是使用具有
Name
Score
属性的类,而不是逗号分隔的字符串值


(上面的代码不检查无效的输入值)

您需要将
上的每个字符串项拆分为
,然后按返回数组的第一个元素和数组的平均第二个元素分组(将其解析为
int
),如下所示:

List<string> AverageList = new List<string> { "matt,5", "matt,7", "jack,4", "jack,8" };
var query = AverageList.Select(s => s.Split(','))
    .GroupBy(sp => sp[0])
    .Select(grp =>
        new
        {
            Name = grp.Key,
            Avg = grp.Average(t=> int.Parse(t[1])),
        });
foreach (var item in query)
{
    Console.WriteLine("Name: {0}, Avg: {1}", item.Name, item.Avg);
}
但是,更好的选择是使用具有
Name
Score
属性的类,而不是逗号分隔的字符串值


(上面的代码不检查无效的输入值)

首先,您需要将未格式化的数据填充到一个列表中,如您所见,我称之为rawScores。然后可以用逗号分隔每一行。然后,您可以检查字典中是否有现有人员,并将其分数添加到字典中,或者如果没有,则创建一个新人员

之后,您只需生成列表的平均值

希望这有帮助

var scores = new Dictionary<string, List<int>>(); 
                var rawScores = new List<string>();
                rawScores.ForEach(raw =>
                {
                    var split = raw.Split(',');
                    if (scores.Keys.All(a => a != split[0]))
                    {
                        scores.Add(split[0], new List<int> {Convert.ToInt32(split[1])});
                    }
                    else
                    {
                        var existing = scores.FirstOrDefault(f => f.Key == split[0]);
                        existing.Value.Add(Convert.ToInt32(split[1]));
                    }
                });
var分数=新字典();
var rawScores=新列表();
rawScores.ForEach(原始=>
{
var split=raw.split(',');
if(scores.Keys.All(a=>a!=split[0]))
{
添加(拆分[0],新列表{Convert.ToInt32(拆分[1])});
}
其他的
{
var existing=scores.FirstOrDefault(f=>f.Key==split[0]);
existing.Value.Add(转换为32(拆分[1]);
}
});

首先,您需要将未格式化的数据填充到一个列表中,正如您所看到的,我称之为rawScores。然后可以用逗号分隔每一行。然后,您可以检查字典中是否有现有人员,并将其分数添加到字典中,或者如果没有,则创建一个新人员

之后,您只需生成列表的平均值

希望这有帮助

var scores = new Dictionary<string, List<int>>(); 
                var rawScores = new List<string>();
                rawScores.ForEach(raw =>
                {
                    var split = raw.Split(',');
                    if (scores.Keys.All(a => a != split[0]))
                    {
                        scores.Add(split[0], new List<int> {Convert.ToInt32(split[1])});
                    }
                    else
                    {
                        var existing = scores.FirstOrDefault(f => f.Key == split[0]);
                        existing.Value.Add(Convert.ToInt32(split[1]));
                    }
                });
var分数=新字典();
var rawScores=新列表();
rawScores.ForEach(原始=>
{
var split=raw.split(',');
if(scores.Keys.All(a=>a!=split[0]))
{
添加(拆分[0],新列表{Convert.ToInt32(拆分[1])});
}
其他的
{
var existing=scores.FirstOrDefault(f=>f.Key==split[0]);
existing.Value.Add(转换为32(拆分[1]);
}
});

如果您有某种数据模型来存储此信息,而不必只处理列表,则可能会使您的生活更轻松。请显示所有相关代码,并查看有关如何提问的常见问题解答。。这是一个格式相当糟糕的问题。让这个家伙休息一下,对一个不那么糟糕的问题投了这么多反对票。就我个人而言,我不会对新用户提出的问题投反对票,这些问题都是有效的,但就所谓的社区习惯而言,可能问得不太好。相反,我解释他们做错了什么,并指出他们没有理由因为“不清楚”而结束这个问题,因为有一个正确的答案可以直接回答这一点。如果您有某种数据模型来存储此信息,而不必只处理列表,可能会使您的生活更轻松。请显示所有相关代码,并查看有关如何提问的常见问题解答。。这是一个格式相当糟糕的问题。让这个家伙休息一下,对一个不那么糟糕的问题投了这么多反对票。就我个人而言,我不会对新用户提出的问题投反对票,这些问题都是有效的,但就所谓的社区习惯而言,可能问得不太好。相反,我解释了他们做错了什么,并向他们指出,没有理由因为“不清楚”而结束这个问题,因为有一个直接针对这一点的有效答案。