我一直在审查这里的许多帖子/回复,但没有找到(或者可能是更好的描述)解决方案。我正在尝试开发一个linq语句,以便我可以解析数据集合。
我有一个匿名的数据集合,我需要能够指定两个不相关的列并组合它们的值以形成其组合值的新集合。该集合被读入IEnumerable> (结果需要相同)。
根据数据样本,要组合的列将有所不同。在方案A中(参见数据样本#1)第1列和第1列需要组合3以生成结果集(参见结果#1)。在方案B中(参见数据样本#2)第2列和第2列需要组合4以生成结果集(参见结果#2)。列标题(第一行)未提前知道,所有值都是字符串(空字符串和非空字符串)。
我希望看到以下内容:
int ColyY = 1;
int ColyX = 3;
var result = FetchMergedColumn(ColX, ColY);
数据样本#1:
Col1 Col2 Col3 Col4
Fish Blue Cloudy 10
Dog Red Rain 33
Cat Black Thunder 55
结果#1:
Fish Cloudy
Dog Rain
Cat Thunder
数据样本#2:
Col1 Col2 Col3 Col4
Blue Fish 10 Cloudy
Red Dog 33 Rain
Black Cat 55 Thunder
结果#2:
Fish Cloudy
Dog Rain
Cat Thunder
任何人都可以帮助我吗?
答案 0 :(得分:1)
您可以使用LINQ轻松完成此操作:
List<List<string>> SelectColumns(List<List<string>> data, params int[] columns)
{
return data.Select(row => row.Where((_, i) => columns.Contains(i))
.ToList())
.ToList();
}
这假设您想要再次返回List<List<string>>
。此外,它使用从零开始的索引,因此,为了获得结果#1,您可以这样称呼它:
var result = SelectColumns(source, 0, 2);
答案 1 :(得分:0)
请记住1.这没有参数检查或错误处理,并且2.我实际上没有运行它以查看它是否完全符合您的要求,这样的事情怎么样?
public static string[][] FetchMergedColumns(params int[] columnNumbers)
{
var dataSample = new[]
{
new[] { "Fish", "Dog", "Cat" },
new[] { "Blue", "Red", "Black" },
new[] { "Cloudy", "Rain", "Thunder" },
new[] { "10", "33", "55" }
};
return columnNumbers
.Select(colNum => dataSample.ElementAt(colNum - 1))
.ToArray();
}
显然你不会在方法中定义数据样本,但希望这可能会指出你正确的方向。