当两个枚举需要组合时,如何使用并行linq

时间:2012-07-19 19:46:40

标签: c# .net linq c#-4.0 plinq

我有两个可以与PLINQ一起使用的枚举,如何正确组合它们?他们在这里:

List<Message> messageList=...;

IEnumerable<int> lineNums=Enumerable.Range(1,messages.Count);
IEnumerable<Message> messages=messageList;

简而言之,我想并行应用一些复杂的耗时格式并将行号映射到消息中。这就是我的意思(没有行号),因为我不知道如何将它们集成到这个表达式中:

var formattedLine=messageList.AsParallel().AsOrdered().Select(message =>
  {
    ... // Some work here to be done in parallel
    return string.Format(...); // Some formatting here of message
  }

然后我将使用简单的foreach格式化结果:

foreach (var line in formattedLine)
  ...

以上对消息有好处,但是我希望在枚举中包含一些格式化的lineNums,与消息一一对应。我不能只是在lambda中互锁增加一个整数,因为我不会得到有序的结果。所以,基本上我需要将两个枚举的一对一映射作为我对lambda的参数,我想。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

使用the select overload that takes an item and the item's index,如下所示:

var formattedLine=messageList.AsParallel().AsOrdered().Select((message, index) =>
{
    ... // Some work here to be done in parallel
    return string.Format(...); // Some formatting here of message using index
});