C# 将字符串列表中的索引中的字符转换为一个字符列表

C# 将字符串列表中的索引中的字符转换为一个字符列表,c#,linq,anonymous-types,sublist,C#,Linq,Anonymous Types,Sublist,这个标题听起来像是胡说八道,但下面的例子有望有所帮助 尝试编写一个大型LINQ语句,其中,给定一个字符串列表和一个整数列表,它可以将该列表中所有字符的列表合并为一个。例如: 指数: {2,4} 可能的: {"hello","world"} 你应该给我: {'l','o','r','d'} 来自每个字符串中的索引2和4 我想我有点不对劲,但这里有一个混乱的声明,我正在努力提供一些工作依据/纠正: var lettersToCheckOut = possible.Select(s =>

这个标题听起来像是胡说八道,但下面的例子有望有所帮助

尝试编写一个大型LINQ语句,其中,给定一个字符串列表和一个整数列表,它可以将该列表中所有字符的列表合并为一个。例如:

指数:

{2,4}
可能的:

{"hello","world"}
你应该给我:

{'l','o','r','d'}
来自每个字符串中的索引2和4

我想我有点不对劲,但这里有一个混乱的声明,我正在努力提供一些工作依据/纠正:

var lettersToCheckOut = possible.Select(s => s.ToCharArray()).Select((c, index) => new
                        {
                            let = c,
                            ind = index
                        }).Where(c => indices.Contains(c.ind)).Select(c => c.let);
像这样的

var chars = indices.SelectMany(i => words.Where(w => i < w.Length)
                                         .Select(w => w[i])).ToList();
Console.WriteLine(string.Join(",", chars)); // lrod
像这样的

var chars = indices.SelectMany(i => words.Where(w => i < w.Length)
                                         .Select(w => w[i])).ToList();
Console.WriteLine(string.Join(",", chars)); // lrod

我知道这个问题已经得到了回答,但这里有一个使用Linq的查询理解语法的替代解决方案。我个人觉得它更优雅,并且正在分享它,以防其他人也这么做:

        var words = new[] { "Hello", "World" };
        var indexes = new[] { 2, 4 };

        //{ 'l', 'o', 'r', 'd' }
        var output = 
            from word in words
            from index in indexes
            where word.Length > index
            select word[index];

我知道这个问题已经得到了回答,但这里有一个使用Linq的查询理解语法的替代解决方案。我个人觉得它更优雅,并且正在分享它,以防其他人也这么做:

        var words = new[] { "Hello", "World" };
        var indexes = new[] { 2, 4 };

        //{ 'l', 'o', 'r', 'd' }
        var output = 
            from word in words
            from index in indexes
            where word.Length > index
            select word[index];

这里的
问题是
?这里的
问题是
?字符顺序与示例不同。不确定这是否重要。@juharr说得好。请注意,要使它们的顺序与OP示例中的顺序相同,只需在我提供的代码中的
索引
单词
之间进行交换,这样
单词
将位于外循环中,而
索引
位于内循环中(逻辑上)。@YoryeNathan Beautility,谢谢。另外,顺序也不重要,对不起,应该指定。@Wilson我建议测试这两种变体的性能差异。当藏品的大小有显著差异时,它们可能会有所不同,但不确定这一点(也不确定以何种方式不同)。@YoryeNathan这将是微不足道的。集合总是少于20个元素,索引总是少于5个左右。字符的顺序与示例不同。不确定这是否重要。@juharr说得好。请注意,要使它们的顺序与OP示例中的顺序相同,只需在我提供的代码中的
索引
单词
之间进行交换,这样
单词
将位于外循环中,而
索引
位于内循环中(逻辑上)。@YoryeNathan Beautility,谢谢。另外,顺序也不重要,对不起,应该指定。@Wilson我建议测试这两种变体的性能差异。当藏品的大小有显著差异时,它们可能会有所不同,但不确定这一点(也不确定以何种方式不同)。@YoryeNathan这将是微不足道的。集合总是在20个元素以下,索引总是在5个左右。