使用 linq 对列表进行采样

2023-12-24

我需要一个辅助方法来将轴标签添加到图表中。我不想在图表中具有值的轴上的每个点添加标签,因为那样会变得太忙。所以我需要定期提取样本。到目前为止,我已经提出了以下满足要求的方法,但我认为必须有一种更简洁的方法来使用 Linq 来完成此任务。谁能想到如何使其更加简洁(n 代表我想要返回的样本总数)?

public static List<T> Sample<T>(this List<T> list, int n)
{
  var samples = new List<T>();
  var divisor = list.Count/n;
  for (var i = 0; i < list.Count; i++)
    if (samples.Count == i/divisor)
      samples.Add(list[i]);
  return samples;
}

嗯,那怎么样:

return Enumerable.Range(0,n).Select(i=>list[(i*list.Count)/(n-1)]);

这并不是说它真的很重要,但这会给你带来稍微更好的复杂性(O(n)代替O(list.Count)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 linq 对列表进行采样 的相关文章

随机推荐