首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将IEnumerable<IEnumerable<T>>转换为IEnumerable<T>

如何将IEnumerable<IEnumerable<T>>转换为IEnumerable<T>
EN

Stack Overflow用户
提问于 2010-02-11 05:06:52
回答 5查看 453关注 0票数 5

我有一个要转换为单维集合的IEnumerable<IEnumerable<T>>集合。有没有可能用泛型扩展方法来实现这一点?现在,我正在做这件事来实现它。

代码语言:javascript
复制
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()));
    }
}

如果不可能得到一个通用的解决方案,我如何才能以一种优雅的方式优化它。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-11 05:49:52

这就是了:

代码语言:javascript
复制
var strings = combinedResults.Select
    (
        c => c.Where(i => i > 0)
        .Select(i => i.ToString())
    ).Where(s => s.Any())
    .Select(s => String.Join(",", s.ToArray());
票数 3
EN

Stack Overflow用户

发布于 2010-02-11 05:08:28

为此,您可以使用Enumerable.SelectMany扩展方法。

如果我没看错你的代码,它的代码应该是:

代码语言:javascript
复制
var filteredCombinations = combinatedResults.SelectMany(o => o)
    .Where(value => value > 0)
    .Select(v => v.ToString());

编辑:如上所述,上面的代码没有像原始代码那样将子集的每个元素连接到一个字符串。使用内置方法,您可以使用以下方法来完成此操作:

代码语言:javascript
复制
var filteredCombinations = combinatedResults
     .Where(resultSet => resultSet.Any(value => value > 0)
     .Select(resultSet => String.Join(",",
         resultSet.Where(value => value > 0)
                  .Select(v => v.ToString()).ToArray()));
票数 18
EN

Stack Overflow用户

发布于 2010-02-11 05:13:15

我会以suggested by driis的身份使用Enumerable.SelectMany

但是,如果您希望自己实现此功能,则执行以下操作会更简洁:

代码语言:javascript
复制
IEnumerable<T> MakeSingleEnumerable<T>(IEnumerable<IEnumerable<T>> combinatedResults)
{
    foreach (var combinatedValues in combinatedResults) {
         foreach (var value in combinatedValues)
              yield return value;
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2240346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档