C#。如何创建具有新值和不同于原始列表

时间:2017-04-21 15:06:17

标签: c# list arraylist

例如,主要数据是

  

主题作者问题

  

体育泰勒'问题'

     

历史泰勒'问题'

     

体育泰勒'问题'

我需要计算每个主题有多少问题,并显示我需要创建另一个列表的答案,其中只包含主题和数字。 所以看起来应该是这样的:

  

体育2

     

历史1

计算我有多少问题

static void Method(List<Class> list)
    {
        int sport = 0;
        int history = 0;
        for (int i = 0; i < list.Count; i++)
        {
            if (list[i].Theme == "History")
            {
                history++;
            }
            else if (list[i].Theme == "Sport")
            {
                sport++;
            }}

所以知道我正在试图弄清楚如何通过List

来展示它

5 个答案:

答案 0 :(得分:2)

听起来你只想要主题和数量?您可以按主题对项目进行分组,并计算每组中的项目数:

var sportsAndCounts = list
    .GroupBy(x => x.Theme)
    .Select(x => $"{x.Key} {x.Count()}");

这会创建您正在描述的字符串,但您可以将分组投影到您需要的任何内容。

答案 1 :(得分:0)

你可以用Dictionary来做到这一点!只需看下面的代码:

static void Theme(List<Class> list) {
     var dict = new Dictionary<string, int>();
     for (var current in list) {
          if (dict.ContainsKey(current.Theme) {
              dict[current.Theme]++;
          } else {
              dict[current.Theme] = 1;
          }
     }
}

之后,您的计数在dict。只需通过例如dict["History"]

答案 2 :(得分:0)

使用实体框架..您可以完成

 var query = list.GroupBy(p => p.Theme)
               .Select(g => new { Sport = g.Key, Count = g.Count() });
var查询中的

你应该有你假装的东西。

PS。没有测试代码;

答案 3 :(得分:0)

List<Question> QuestionList = new List<Question>
{
    new Question{ Theme = "Sport", Author = "Tyler", T = "Question", },
    new Question{ Theme = "History", Author = "Tyler", T = "Question", },
    new Question{ Theme = "Sport", Author = "Tyler", T = "Question", },
};

var HistoryCount = QuestionList.Count(x => x.Theme == "History");
var SportCount = QuestionList.Count(x => x.Theme == "Sport");

HistoryCount将为2, SportCount将是1。

这将要求您引用System.Linq。

答案 4 :(得分:0)

简单方法是使用Linq和group by group

var query = from item in list
    group item by item.Theme into group
    select new { Question = group.Key, Count = group.Count()};

foreach(var item in query){
    Console.WriteLine("{0} {1}", item.Question, item.Count);
}

    Dictionary<string, int> themes = new Dictionary<string, int>();

但您也可以使用词典存储每个主题并计算:

Dictionary<string, int> themes = new Dictionary<string, int>();

for (int i = 0; i < list.Count; i++)
{
    if(themes.ContainsKey(list[i].Theme))
        themes[this[i].Theme]++;
    else
        themes[this[i].Theme = 1;
}

foreach(var keyValuePair in themes.OrderByDescending(x => x.Value).ThenBy(x => x.Key)){
    Console.WriteLine("{0} {1}", keyValuePair.Key, keyValuePair.Value);
}