我有一个要转换为单维集合的IEnumerable<IEnumerable<T>>集合。有没有可能用泛型扩展方法来实现这一点?现在,我正在做这件事来实现它。
List<string> filteredCombinations = new List<string>();
//For each collection in the combinated results collection
foreach (var combinatedValues in combinatedResults)
{
List<string> subCombinations = new List<string>();
//For each value in the combination collection
foreach (var value in combinatedValues)
{
if (value > 0)
{
subCombinations.Add(value.ToString());
}
}
if (subCombinations.Count > 0)
{
filteredCombinations.Add(String.Join(",",subCombinations.ToArray()));
}
}如果不可能得到一个通用的解决方案,我如何才能以一种优雅的方式优化它。
发布于 2010-02-11 05:49:52
这就是了:
var strings = combinedResults.Select
(
c => c.Where(i => i > 0)
.Select(i => i.ToString())
).Where(s => s.Any())
.Select(s => String.Join(",", s.ToArray());发布于 2010-02-11 05:08:28
为此,您可以使用Enumerable.SelectMany扩展方法。
如果我没看错你的代码,它的代码应该是:
var filteredCombinations = combinatedResults.SelectMany(o => o)
.Where(value => value > 0)
.Select(v => v.ToString());编辑:如上所述,上面的代码没有像原始代码那样将子集的每个元素连接到一个字符串。使用内置方法,您可以使用以下方法来完成此操作:
var filteredCombinations = combinatedResults
.Where(resultSet => resultSet.Any(value => value > 0)
.Select(resultSet => String.Join(",",
resultSet.Where(value => value > 0)
.Select(v => v.ToString()).ToArray()));发布于 2010-02-11 05:13:15
我会以suggested by driis的身份使用Enumerable.SelectMany。
但是,如果您希望自己实现此功能,则执行以下操作会更简洁:
IEnumerable<T> MakeSingleEnumerable<T>(IEnumerable<IEnumerable<T>> combinatedResults)
{
foreach (var combinatedValues in combinatedResults) {
foreach (var value in combinatedValues)
yield return value;
}
}https://stackoverflow.com/questions/2240346
复制相似问题