从字符串列表的索引中获取字符到一个字符列表中
本文关键字:列表 字符 一个 获取 字符串 索引 | 更新日期: 2023-09-27 18:12:59
标题听起来毫无意义,但下面的例子可能会有所帮助。
试着写一个大的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
逻辑如下:
对于每个索引,我想遍历所有可能的单词,并收集字符。
我必须首先检查索引是否在当前单词的范围内
从每个单词中取被索引的字符作为当前索引
使用
SelectMany
方法,我得到一个字符的集合,而不是IEnumerable<char>
的集合。
您可以在indices
和words
之间交换以获得不同顺序的字符:
var chars = words.SelectMany(w => indices.Where(i => i < w.Length)
.Select(i => w[i])).ToList();
Console.WriteLine(string.Join(",", chars)); // lord
我知道这个问题已经得到了回答,但是这里有一个使用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];