首页 文章

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

提问于
浏览
2

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

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

  • word1

  • word2

  • word3

  • word4

  • word5

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

  • word1 [空格] word2

  • word2 [空格] word3

  • word3 [空格] word4

  • word4 [空格] word5

任何人都可以提出最有效的方法 .

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

2 回答

  • 13

    我想你想要:

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

    's assuming you'重新使用.NET 4,这是Zip的引入 .

  • 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);
    

相关问题