在C#中巧妙地聚合元组

时间:2015-05-14 17:58:36

标签: c# parallel-processing

我正在并行处理复杂查询。从被调用的方法中我得到了很多Tuple<IEnumerable<Object>, int>个对象。我想快速聚合它们,但可能.Aggregate(下面的代码)不是最好的选择。什么是正确的方法?

public static Tuple<IEnumerable<Object>, int> Parse(Object obj)
{
    var ieo = new List<Object>();
    var x = 5;
    return new Tuple<IEnumerable<Object>, int>(ieo, x);
}

public static void Query(List<Object> obj)
{
    var result = obj
        .AsParallel()
        .Select(o => Parse(o))
        . // do something to aggregate this quickly and get a tuple of:
          // - flattened IEnumerable<Object>
          // - summed up all second items
}

我的总体建议,可能非常缓慢,看起来非常糟糕。但是有效。

        .Aggregate((t1, t2) => new Tuple<IEnumerable<Object>, int>(t1.Item1.Concat(t2.Item1), t1.Item2 + t2.Item2));

1 个答案:

答案 0 :(得分:1)

你可以写自定义修补器。

var personCal = new PersonCalender({salary: 138});

var PersonCalendar = React.createClass({
   componentDidMount: function() {
      this.setState({ 
         computedSalary: this.calculatedSalary(this.props.salary) 
      });
   },
   render: function() {
     ... use this.state.computedSalary
   }
});

以后你可以使用它:

public static Tuple<IEnumerable<T>, int> MagicFlatten<T>(
  this IEnumerable<Tuple<IEnumerable<T>, int>> tupleCrap) 
{
   var item1 = tupleCrap.SelectMany(x => x.Item1);
   var item2 = tupleCrap.Sum(x => x.Item2);
   return new Tuple<...>(item1, item2);
}