【问题标题】:code to run combination of strings in parallel [duplicate]并行运行字符串组合的代码[重复]
【发布时间】:2017-07-12 13:23:01
【问题描述】:
public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k)
{
    return k == 0 
        ? new[] { new T[0] } 
        : elements.SelectMany((e, i) => elements
              .Skip(i + 1).Combinations(k - 1)
              .Select(c => (new[] { e }).Concat<T>(c)));
    }

代码当前运行串联的字符串组合,例如以两种方式列出 a、b、c 将给出 ab、ac、bc,这是非常正确的。有没有办法可以修改代码以并行运行组合(即最大化我的 cpu 处理器),因为我打算在大量字符串上运行组合。

【问题讨论】:

  • 使用elements.AsParallel().SelectMany...

标签: c#


【解决方案1】:

这应该会引入一些并行性。特别注意AsParallel

public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k)
{
    return k == 0 ? (IEnumerable<IEnumerable<T>>)new[] { new T[0] } : elements.AsParallel().SelectMany((e, i) => elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] { e }).Concat<T>(c)));
}

您也可以考虑使用Enumerable.Empty 而不是new T[0]

【讨论】:

  • 尝试以这种方式引入并行性无法编译该方法
  • 'T[][]' 和 System.Linq.ParallelQuery 之间没有隐式转换,更换新的 T[0 后我仍然遇到同样的错误] 与 Enumerable.Empty
  • 如果你现在能提供这个方法的时间就太好了。
  • 拜托 Enigmativity 可以进一步解释一下,我不明白你的意思
  • 他建议您实际比较原始代码与“并行化”版本的速度,并确保新代码实际上比旧代码更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 2016-07-12
  • 1970-01-01
  • 2019-03-22
  • 2023-03-09
相关资源
最近更新 更多