【发布时间】:2017-06-01 18:08:40
【问题描述】:
我有一个 ConcurrentDictionary 数组,其中每个数组都有相同的固定大小。它看起来像这样:ConcurrentDictionary<int, double[]> ItemFeatures
我想通过将所有值除以该列中的最大值来标准化列表中的值。例如,如果我的列表大小为 5,我希望第一个位置的每个元素都除以该位置所有值的最大值,以此类推,从位置 2 开始。
我能想到的最简单的做法是首先遍历每个列表和列表中的每个元素,然后存储每个位置的最大值。然后再次迭代它们并将它们除以先前找到的最大值。
在 Linq 中是否有更优雅的方法可以做到这一点?这些字典会很大,所以效率越高/耗时越少越好。
【问题讨论】:
-
LINQ 不会让代码做更少的事情,充其量只会阻止你需要编写尽可能多的代码来做同样的事情,你是 going需要遍历所有数据以找到每个位置的最大值;如果不查看每个值,您就无法找到最大值,根本没有办法解决。
-
在您执行此操作时,是否有任何其他线程将访问
ConccurrentDictionary?如果是这样,问题很可能无法解决。 -
@Servy 显然 Linq 无法创造奇迹。我的问题是,这是否会更有效(在内存分配或时间方面),就像 MATLAB 中的向量化比循环更有效一样。
-
不,不会同时访问它。
-
LINQ 是编写某些查询的便捷方式。任何你可以用它做的事情,你都可以不用它,但是没有它的代码可能会更长,或者更有可能传达的意思不太清楚。并非所有 LINQ 操作在底层都是循环(尽管其中很多只是一个循环),但它们大多都是相当简单的迭代过程,人们一直在没有 LINQ 的情况下编写。
标签: c# linq dictionary