我有一个列表,其中包含该字符串的字符串和值,但列表包含多个同名的字符串,我现在要组名并在单个条目中添加该名称的值。例如
姓名.....价值
apple ----- 2
mango ----- 4
banana ---- 8
apple ----- 4
现在我想将苹果添加为单个条目。
答案 0 :(得分: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 }
};
然后你可以将它分组并总结如下的类似项目:
var netFruits= fruits.GroupBy(s => s.Name)
.Select(s => new Test()
{
Name=s.Key,
value = s.Sum(b=>b.value)
});
其中netFruits将有两个条目
其中Test
是:
public class Test
{
public string Name { get; set; }
public int value { get; set; }
}
答案 1 :(得分:0)
您可以像这样进行分组
yourlist.GroupBy(x=>x.YourField())
答案 2 :(得分: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)));
}
然而,目前尚不清楚您的意思是“现在我想将苹果添加为单一条目”。
答案 3 :(得分: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>
列表吗?
答案 4 :(得分: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等于具有此类Name的元素的值的总和。
如果您希望将返回值作为值的总和作为返回值,则可以将最后一个选择替换为:
.Select(x=> x.Key + " ----- " + x.Sum(y=>y.Value).ToString());
如果您已经有一个包含名称和值字段的列表,只需删除第一个选择。
答案 5 :(得分:0)
list.Distinct();
确保您在yr名称空间中包含了System.Linq。