在没有For循环的Linq中对集合进行配对
本文关键字:集合 Linq For 循环 | 更新日期: 2023-09-27 18:14:01
我有两个集合
int[] numbers = {5, 2, 1, 5};
string[] words = {"flibble", "bobble", "double", "dumble"};
我想使用linq表达式在第二个集合上使用第一个集合。使用循环,我将执行以下操作
List<string> results = new List<string>();
for(int i = 0; i<numbers.Count(), i++)
{
results.Add(words[i].SubString(numbers[i]);
}
return results;
然而,这涉及到创建一个列表没有真正的原因…在Linq中有办法做到这一点吗?
我猜你在找Enumerable.Zip()
:
numbers.Zip(words, (n, w) => w.Substring(n));
你可以试试:
var res = words.Select((str, i) => str.Substring(numbers[i]))
Zip
的替代方案,可避免陷阱(集合中的项目长度错误或数量不同)
IEnumerable<string> result = numbers
.Select((len, i) => {
string word = words.ElementAtOrDefault(i);
if (word != null)
{
word = word.Length >= len ? word.Substring(0, len) : word;
}
return word;
});
Result: flibb,bo,d,dumbl