使用linq对列表进行采样

gre*_*ade 4 c# linq algorithm

我需要一个辅助方法来将轴标签添加到图表中.我不想在图表中具有值的轴的每个点添加标签,因为这会太忙.所以我需要定期提取样品.到目前为止,我已经提出了满足要求的以下方法,但我认为必须有一种更简洁的方法来实现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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ner 5

嗯,怎么样:

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

并不是真的很重要,但这会给你一个稍微好一点的复杂性(O(n)而不是O(list.Count)