首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接3个单词列表

连接3个单词列表
EN

Stack Overflow用户
提问于 2012-12-17 06:18:49
回答 3查看 654关注 0票数 1

我正在尝试弄清楚如何使用C#创建一个单一的连接列表,该列表来自3个单独的列表。例如:

代码语言:javascript
复制
 List 1: Ugly, Pretty
 List 2: Dogs, Carts, Pigs
 List 3: Rock, Suck

输出:

代码语言:javascript
复制
 Ugly Dogs Rock
 Ugly Dogs Suck
 Ugly Cats Rock
 Ugly Cats Suck
 Ugly Pigs Rock
 Ugly Pigs Suck
 Pretty Dogs Rock
 Pretty Dogs Suck
 Pretty Cats Rock
 Pretty Cats Suck
 Pretty Pigs Rock
 Pretty Pigs Suck

我知道这只是嵌套循环,但我不能理解的是如何对每个列表使用列表字符串。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-17 06:21:03

代码语言:javascript
复制
var list = from s1 in list1
           from s2 in list2
           from s3 in list3
           select s1 + " " + s2 + " " + s3;
票数 4
EN

Stack Overflow用户

发布于 2012-12-17 06:20:39

它不是笛卡尔乘积吗?

代码语言:javascript
复制
var r = from i1 in list1
        from i2 in list2
        from i3 in list3
        select new { i1, i2, i3 };
        // or String.Format("{0} {1} {2}", i1, i2, i3);
票数 4
EN

Stack Overflow用户

发布于 2012-12-17 06:24:24

代码语言:javascript
复制
List<string> list1 = new List<string>(){ "Ugly", "Pretty"};
List<string> list2 = new List<string>(){ "Dogs", "Carts", "Pigs"};
List<string> list3 = new List<string>(){ "Rock", "Suck"};

var result = from s1 in list1
             from s2 in list2
             from s3 in list3
             select new[] { s1, s2, s3 };

foreach (var item in result)
{
    Console.WriteLine(String.Join(",", item));
}

如果你正在寻找一个更通用的解决方案,不仅仅是3个列表,你可以尝试Eric Lippert的解决方案

代码语言:javascript
复制
foreach (var item in new[] { list1, list2, list3 }.CartesianProduct())
{
    Console.WriteLine(String.Join(",", item));
}

代码语言:javascript
复制
public static partial class MyExtensions
{
    // Eric Lippert’s Blog
    // Computing a Cartesian Product with LINQ
    // http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx
    public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences)
    {
        // base case: 
        IEnumerable<IEnumerable<T>> result = new[] { Enumerable.Empty<T>() };
        foreach (var sequence in sequences)
        {
            var s = sequence; // don't close over the loop variable 
            // recursive case: use SelectMany to build the new product out of the old one 
            result =
                from seq in result
                from item in s
                select seq.Concat(new[] { item });
        }
        return result;
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13906032

复制
相关文章

相似问题

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