3

我有两个收藏

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 中做到这一点?

4

3 回答 3

9

我猜你正在寻找Enumerable.Zip()

numbers.Zip(words, (n, w) => w.Substring(n));
于 2013-05-17T15:38:27.907 回答
1

一个替代方案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;
});

结果:flibb,bo,d,dumbl

演示

于 2013-05-17T15:45:16.410 回答
1

你可以试试这个:

var res = words.Select((str, i) => str.Substring(numbers[i]))
于 2013-05-17T15:39:22.667 回答