有没有一种方法可以将GroupBy分成一组?

时间:2019-04-11 01:09:36

标签: c#

我已经将自己发展到一个角落,指望只需要处理分组记录的功能。现在,它的任务是处理单个记录。我不想仅仅为了单独处理记录而对代码进行大量重构。有没有一种方法可以使用.GroupBy来使C#列表组单独记录每条记录?

List<string[]> CsvData = new List<string[]>() { };
IEnumerable<IGrouping<string, string[]>> GroupedCsvData = CsvData.GroupBy(x => x);

这将产生错误:“无法将类型'IEnumerable<IGrouping<string[], string[]>>'隐式转换为'IEnumerable<IGrouping<string, string[]>>'。存在显式转换。是否缺少强制类型转换?”

3 个答案:

答案 0 :(得分:2)

假设您有重复的潜力,则可以执行以下操作:

var items = new List<string>();
var groups = items.Select((item, index) => new {
    Item = item,
    Index = index
}).GroupBy(o => o.Index, o => o.Item);

答案 1 :(得分:2)

在我看来,要为每个元素生成唯一的string密钥是必经之路。试试这个:

IEnumerable<IGrouping<string, string[]>> GroupedCsvData =
    CsvData
        .Select((Csv, Index) => new { Csv, Key = Index.ToString() })
        .GroupBy(x => x.Key, x => x.Csv);

答案 2 :(得分:0)

我怀疑这可能“接近”所需的意图:

// List<string[]> -> IEnumerable<string> -> IGrouping<string, string>
CsvData.SelectMany(x => x).GroupBy(x => x);

CsvData是一个列表,因此在CsvData.GroupBy(x => x)中,x(密钥)是一个字符串[],而不是一个字符串。