首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# LINQ 處理字符串數據轉 DataTable 統計分組實戰

     編輯:程式設計疑難解答

原始需求

將類似 aaa bb 10 cc 11 的多行字符串解析,按首列分組統計後列數值求和,輸出格式化結果。已有 LINQ 字符串版實現,需遷移至 DataTable 場景。

DataTable 處理流程

  1. 定義列結構:Key(string)、SubKey(string)、Value(int)。
  2. 解析字符串填充 DataTable。
  3. 使用 LINQ to DataSet 分組聚合。

完整代碼

DataTable dt = new DataTable();
dt.Columns.Add("Key", typeof(string));
dt.Columns.Add("SubKey", typeof(string));
dt.Columns.Add("Value", typeof(int));

// 假設 data 為原始多行字符串
foreach (var line in data.Split('\n')) {
    var parts = line.Split(' ');
    for (int i = 1; i < parts.Length; i += 2) {
        dt.Rows.Add(parts[0], parts[i], int.Parse(parts[i+1]));
    }
}

// LINQ 分組統計
var result = dt.AsEnumerable()
    .GroupBy(r => r.Field("Key"))
    .Select(g => new {
        Key = g.Key,
        Count = g.Count(),
        SumGroups = g.GroupBy(r => r.Field("SubKey"))
                     .Select(sg => new { SubKey = sg.Key, Sum = sg.Sum(r => r.Field("Value")) })
    });

// 輸出
foreach (var g in result) {
    Console.Write($"{g.Key} {g.Count}次 ");
    foreach (var sg in g.SumGroups) {
        Console.Write($"{sg.SubKey} {sg.Sum} ");
    }
    Console.WriteLine();
}

統計首列出現次數


var keyCounts = dt.AsEnumerable()
    .GroupBy(r => r.Field("Key"))
    .Select(g => new { Key = g.Key, Count = g.Count() });

性能提示

  • 大數據量時,DataTable 內存開銷大,可直接用 List<Tuple<string,string,int>> 替代。
  • AsEnumerable() 需引用 System.Data.DataSetExtensions 程序集。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved