1

我有一个列表,其中包含字符串和该字符串的值,但列表包含多个同名字符串,现在我想对名称进行分组并在单个条目中添加该名称的值。例如

名称.....值

apple -----  2
mango -----  4
banana ----  8
apple -----  4

现在我想将苹果添加为一个条目。

4

6 回答 6

1

可能这就是你想要的:

假设你有一个这样的集合:

List<Test> fruits = new List<Test>() {   new Test() { Name="Apple", value=3 }
                                        , new Test() {Name="Apple",value=5 } 
                                        , new Test() {Name="Orange",value=5 }
                                     };

然后你可以 groupBy 它并总结类似的项目,如下所示:

var netFruits= fruits.GroupBy(s => s.Name)
                     .Select(s => new Test() 
                       { 
                           Name=s.Key, 
                           value = s.Sum(b=>b.value) 

                        });

其中 netFruits 将有两个条目

  • 苹果 8
  • 奥拉奇 5

哪里Test是:

public class Test
{
    public string Name { get; set; }
    public int value { get; set; }
}
于 2013-09-03T07:48:07.533 回答
0

你可以这样做 groupby 像这样

yourlist.GroupBy(x=>x.YourField())
于 2013-09-03T07:41:38.107 回答
0

由于 - 将值与键分开的数量似乎是可变的,我想使用正则表达式进行拆分更合适:

var query = yourlist.Select(x=>{
         var arr = Regex.Split(x,@"[-]+");
         return new{
            Name = arr[0],
            Value = Int32.Parse(arr[1])
         };
    })
    .GroupBy(x=>x.Name)
    .Select(x=> new{Name = x.Key, Value=x.Sum(y=>y.Value)});

这样,您将拥有一个新的匿名对象,其属性 Name 等于您的字符串,而属性 Value 等于具有该名称的元素的值之和。

相反,如果您希望返回一个将值的总和作为值的字符串,则可以将最后一个选择替换为:

     .Select(x=> x.Key + " ----- " + x.Sum(y=>y.Value).ToString());

如果,您已经有一个包含名称和值字段的列表,只需删除第一个 Select。

于 2013-09-03T07:53:48.393 回答
0

如果我认为我知道您想要的是检索不同的值。这就是它可以做到的

        List<String> MyListOfFruit = new List<String>()
        {
            {"Banana"},
            {"Banana"},
            {"Apple"}
        };
        List<String> GroupedListOfFruits = new List<String>();
        GroupedListOfFruits.AddRange(MyListOfFruit.Distinct());
        //Now GroupedListOfFruits contains two items: Banana and Apple.

否则,发布一段代码,其中包含您确切拥有的列表类型。你有KeyValuePair<String, int>可能的清单吗?

于 2013-09-03T07:45:58.750 回答
0
list.Distinct(); 

确保您已将 System.Linq 包含在 yr 命名空间中。

于 2013-09-03T08:11:43.267 回答
0

所以他们是分开的"-----"

var groups = list.Select(str => str.Split(new[]{"-----"}, StringSplitOptions.None))
    .Select(split => new { Name = split.First(), Value = split.Last() })
    .GroupBy(x => x.Name);

foreach (var grp in groups)
{
    Console.WriteLine("Name:{0} Values:{1}", grp.Key, string.Join(",", grp.Select(x => x.Value)));
}

但是,尚不清楚“现在我想将苹果添加为单个条目”是什么意思。

于 2013-09-03T07:42:34.600 回答