LINQ表达式只提取两个单词短语

时间:2012-01-27 12:40:38

标签: c# linq

我有一个(对象)列表,对象中有一个属性作为字符串。

此属性始终包含单个单词,并且希望成对循环遍历所有顺序组合,例如:

  • word1
  • word2
  • WORD3
  • word4
  • 的word5

我正在尝试编写LINQ,它允许我以下列格式迭代数据:

  • word1 [space] word2
  • word2 [space] word3
  • word3 [space] word4
  • word4 [space] word5

有人能提出最有效的方法。

我现在有一堆条件IF语句,我想删除。

2 个答案:

答案 0 :(得分:13)

我想你想要:

var pairs = words.Zip(words.Skip(1), (x, y) => x + " " + y);

假设您正在使用.NET 4,这是在引入Zip时。

答案 1 :(得分:1)

您可以编写自己的扩展方法:

public static IEnumerable<Tuple<TOutput, TOutput>> Pairwise<TInput, TOutput>(this IEnumerable<TInput> collection, Func<TInput, TOutput> func)
{
  using (var enumerator = collection.GetEnumerator()) 
  {
    if (!enumerator.MoveNext()) yield break;
    TOutput first = func(enumerator.Current);
    while (enumerator.MoveNext())
    {
      TOutput second = func(enumerator.Current);
      yield return Tuple.Create(first, second);
      first = second;
    }
  }
}

哪个可以这样使用:

IEnumerable<string> pairs = yourCollection.Pairwise(element => element.Property).Select(t => t.Item1 + ' ' + t.Item2);