遇到一个棘手问题,请老师们帮解答一下:
原始的表

统计表

{
string data = @"aaa bb 10 cc 11 dd 12
aaa cc 9 dd 4 bb 2
aaa cc 16 bb 9 dd 8
bbb a1 6 a2 9 a3 8
bbb a2 7 a3 4 a1 6";
string result = string.Join("\r\n", data.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(' ')).SelectMany(x => Enumerable.Range(0, 3).Select(y => new { a = x[0], b = x[y * 2 + 1], c = int.Parse(x[y * 2 + 2]) }))
.GroupBy(x => x.a)
.Select(x => new { a = x.Key, b = x.GroupBy(y => y.b).Select(y => new { b = y.Key, c = y.Sum(z => z.c) }) })
.Select(x => x.a + " " + string.Join(" ", x.b.Select(y => y.b + " " + y.c.ToString()))));
Console.WriteLine(result);
}
}
}
aaa bb 21 cc 36 dd 24
bbb a1 12 a2 16 a3 12
Press any key to continue . . .
谢谢仁兄,我试试看
aaa bb 10 cc 11 dd 12 ee 13
aaa cc 9 dd 4 bb 2 ee13
aaa cc 16 bb 9 dd 8 ee13
bbb a1 6 a2 9 a3 8
bbb a2 7 a3 4 a1 6
如果是这种结构呢 数据从数据库中取 该如何处理 实在太深奥了,望老师百忙中帮解答一下,多谢
using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
string data = @"aaa bb 10 cc 11 dd 12 ee 13
aaa cc 9 dd 4 bb 2 ee 13
aaa cc 16 bb 9 dd 8 ee 13
bbb a1 6 a2 9 a3 8
bbb a2 7 a3 4 a1 6";
string result = string.Join("\r\n", data.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(' ')).SelectMany(x => Enumerable.Range(0, x.Count() / 2).Select(y => new { a = x[0], b = x[y * 2 + 1], c = int.Parse(x[y * 2 + 2]) }))
.GroupBy(x => x.a)
.Select(x => new { a = x.Key + " " + x.Count() + "次", b = x.GroupBy(y => y.b).Select(y => new { b = y.Key, c = y.Sum(z => z.c) }) })
.Select(x => x.a + " " + string.Join(" ", x.b.Select(y => y.b + " " + y.c.ToString()))));
Console.WriteLine(result);
}
}
aaa 12次 bb 21 cc 36 dd 24 ee 39
bbb 6次 a1 12 a2 16 a3 12
感谢caozhy老师,能否统计aaa bbb出现的次数写一下呢 随便能否把老师的联系方式私信给我呢,随便寄点小特产给老师,感谢您的回答
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Q239660
{
class Program
{
static void Main(string[] args)
{
string data = @"aaa bb 10 cc 11 dd 12
aaa cc 9 dd 4 bb 2
aaa cc 16 bb 9 dd 8
bbb a1 6 a2 9 a3 8
bbb a2 7 a3 4 a1 6";
string result = string.Join("\r\n", data.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split(' ')).SelectMany(x => Enumerable.Range(0, 3).Select(y => new { a = x[0], b = x[y * 2 + 1], c = int.Parse(x[y * 2 + 2]) }))
.GroupBy(x => x.a)
.Select(x => new { a = x.Key, b = x.GroupBy(y => y.b).Select(y => new { b = y.Key, c = y.Sum(z => z.c) }) })
.Select(x => x.a + " " + string.Join(" ", x.b.Select(y => y.b + " " + y.c.ToString()))));
Console.WriteLine(result);
}
}
}