在没有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中有办法做到这一点吗?

在没有For循环的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