2 audiohifi audiohifi 于 2016.03.12 23:22 提问

请求caozhy回答一下,如果是datatable该如何处理
x

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);
}
}

感谢caozhy大师的回答,如果是datatable该如何处理,本人超级菜,多谢了,如果统计aaa bbb的次数,又该如何写了

13个回答

caozhy
caozhy   Ds   Rxr 2016.03.14 23:10
已采纳

图片说明

caozhy
caozhy   Ds   Rxr 2016.03.12 23:57

我在飞机场没法详细回答你的问题。大概来说,把最后一个select去掉。

加入如下代码
DataTable dt = new DataTable();
dt.Columns.Add("第一列") ;
dt.Columns.Add("第二列");
foreach (var item in result)
{
dt.Rows.NewRow(new string[] { item.a, item.b.ToArray()[0]}, item.b.ToArray()[1], ... );
}

caozhy
caozhy   Ds   Rxr 2016.03.14 23:09

新建一个winforms窗体,双击,在form_load编写:

             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";
            var result = 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) }) });
            DataTable dt = new DataTable();
            for (int i = 0; i < 10; i++)
                dt.Columns.Add(((char)(65 + i)).ToString());
            foreach (var item in result)
            {
                var row = dt.NewRow();
                row[0] = item.a;
                int j = 1;
                foreach (var item1 in item.b)
                {
                    row[j++] = item1.b;
                    row[j++] = item1.c;
                }
                dt.Rows.Add(row);
            }
            DataGridView dgv = new DataGridView();
            this.Controls.Add(dgv);
            dgv.Dock = DockStyle.Fill;
            dgv.DataSource = dt;
audiohifi
audiohifi   2016.03.13 00:01

多谢老师
我的意思是: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"是个datatable 不知道该如何处理,祝老师旅途愉快

audiohifi
audiohifi   2016.03.14 00:33

caozhy老师 如果数据源是个datatable,是否需要转换为数组,分组排序统计以后生成datatable呢?实在不好意思,希望老师在百忙之中帮我解答一下。谢谢老师,反复的问,惭愧,多谢了

audiohifi
audiohifi   2016.03.14 22:45

caozhy老师 ,在么?在线等,呵呵

caozhy
caozhy 在的,刚看到,稍等
接近 2 年之前 回复
audiohifi
audiohifi   2016.03.14 22:51

先谢了哈 您帮我看看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"数据源是个datatable 不知道该如何处理

audiohifi
audiohifi   2016.03.14 23:00

是个横向排列的,挺怪的,估计只有老师这样的大师才能帮我解答了 是否要将datatable 转数组呢,呵呵不好意思哈

caozhy
caozhy   Ds   Rxr 2016.03.14 23:15
 你的数据源的datatable表结构是怎么样的。
大概你可以这么写
string data = "";
foreach (var row in datatable.Rows)
{
    data += string.Join(" ", row.ItemArray) + "\r\n";
}
var result = ...
audiohifi
audiohifi   2016.03.14 23:18

谢了,大师,非常热心的一个人,赞一个,还个问题讨教,如果数据源是个datatable 是转换一下呢还是怎么写?

共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!