2012-01-27 79 views
2

我有一個(對象)列表,對象中有一個屬性作爲字符串。LINQ表達式僅提取兩個單詞短語

此屬性總是包含單個的詞語,希望通過對所有的順序組合循環,例如:

  • 字1
  • 單詞2
  • WORD3
  • word4
  • 的word5

我想寫LINQ這將允許我通過數據以下列格式迭代:

  • WORD1 [空格] WORD2
  • WORD2 [空格] WORD3
  • WORD3 [空格] word4
  • word4 [空格] WORD5

任何人都可以建議這樣做的最有效的方法。

我有一堆有條件的IF語句,我正在尋找刪除。

回答

13

我想你想:

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

這是假設你使用.NET 4,當Zip介紹了這是。

+1

如果不是在.NET 4中,喬恩斯基特仍然可以提供幫助。參見Jon Skeet的[EduLinq](http://msmvps.com/blogs/jon_skeet/)的[Zip](http://code.google.com/p/edulinq/source/browse/src/Edulinq/Zip.cs) archive/tags/Edulinq/default.aspx)系列。 – Brian 2012-01-27 14:21:53

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); 
+0

感謝您的回覆。我使用.NET 4並實現了Jon的答案。 – Nick 2012-01-27 16:57:44

相關問題