2013-09-15 2 views
0

Я просто ищу, чтобы иметь возможность сортировать результаты BatchedJoinBlock (http://msdn.microsoft.com/en-us/library/hh194683.aspx), чтобы разные результаты разных целей сохранялись вместе. Я объясню! Например, в некоторых псевдо-коде:Использование Orderby on BatchedJoinBlock (Of T1, T2) - поток данных (параллельная библиотека задач)

Dim batchedJoin = New BatchedJoinBlock(Of String, object)(4) 
    batchedJoin.Target1.Post("String1Target1") 
    batchedJoin.Target2.Post(CType(BuildIt, StringBuilder1)) 
    batchedJoin.Target1.Post("String1Target2") 
    batchedJoin.Target2.Post(CType(BuildIt, StringBuilder2)) 
Dim results = batchedJoin.Receive() 
'This sorts one result... 
Dim SortByResult = results.Item1.OrderBy(Function(item) item.ToString, New NaturalStringComparer) 

В принципе у меня есть строка и объект, переменная SortByResult выше сортирует строки точно так, как я хотел бы их сортировать. Я ищу способ получить объекты, которые были в одном и том же номере индекса в target2, в том же порядке. например если «String1Target1» изменяет порядок, я хотел бы как-то надежно ссылаться на него/вместе с «StringBuilder1». Фактический конечный результат просто должен состоять в том, что объекты (target2) сортируются в порядке, который определяется сортировкой строк (target1). Что-то вроде:

Dim EndResult = results.Item2.OrderBy(strings in target1) 

но я с радостью возьму промежуточное решение! Я также пробовал использовать словарь (results.Item2.ToDictionary) со строкой в ​​качестве ключа (что также было бы прекрасным решением), но это немного выше моего ken, используя выражения lamba в соответствующем контексте. Я могу реально сделать это несколькими шагами со списком или чем-то другим, но я пытаюсь получить что-то более эффективное/что-то научиться, и кажется, что есть много вариантов по умолчанию с результатами совместного блока, что я просто не достаточно опытный, чтобы использовать. Заранее благодарим за любую помощь, которую вы можете предоставить!

+1

Почему вы используете 'BatchedJoinBlock' для этого? Разве вы не можете объединить две части данных (возможно, в «Tuple»), а затем использовать обычный «BatchBlock»? – svick

+0

Стоит попробовать! Спасибо за идею. – Finch042

+0

@svick честно работал как шарм. Мне просто нужен был кто-то, чтобы указать на очень очевидное для меня, я думаю. Еще раз спасибо. – Finch042

ответ

1

Для меня, похоже, вы действительно не хотите BatchedJoinBlock, потому что две части данных всегда собраны вместе. Лучшим вариантом для этого будет BatchBlock от Tuple<string, object>. Когда у вас это есть, вы можете использовать LINQ непосредственно для сортировки каждой партии:

results.OrderBy(Function(tuple) tuple.Item1)