我已经将自己发展到一个角落,指望只需要处理分组记录的功能。现在,它的任务是处理单个记录。我不想仅仅为了单独处理记录而对代码进行大量重构。有没有一种方法可以使用.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[]>>'
。存在显式转换。是否缺少强制类型转换?”
答案 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(密钥)是一个字符串[],而不是一个字符串。