获取列表的n个元素,每个元素与另一个元素的距离相同

时间:2016-02-22 00:18:46

标签: c# .net algorithm linq

在C#中,如果可能的话,使用Linq,我想检索列表中的 n 元素(有X个元素),其距离,如果可能的话与其他人相同

例如,假设我们有一个整数列表:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

n = 4,我想得到:

0 4 8 12

n = 8:

0 2 4 6 8 10 12 14

n = 3:

0 7 14

如果不可能,例如n = 14,我只想检索前14项。

对于这个问题,n当然是< X

修改 返回的输出应该在整个范围内“扩展”。

(即,对于n = 3:

0 1 2 

不可接受)

此外,输出应从列表的第一个元素开始(即:此处为0)

2 个答案:

答案 0 :(得分:1)

有很多方法......我会用linq做的:

var list = new List<int> { a, b, your other numbers};
int n = 3;
int distance = list.Count / n;
var result=list.Where(x=>(list.IndexOf(x) % distance) == 0);

条件可以应用于你不想使用linq的for循环

答案 1 :(得分:1)

我的回答是这些假设:

  • 样本是从整数的顺序列表中提取的。
  • 结果将始终包含第一个数字。
  • 结果应包含尽可能均匀分布的整数,并尽可能分散,优先考虑均匀度。

此方法首先确定间距,然后绘制样本:

IEnumerable<int> GetEvenlySpacedSamples(int startNumber, int count, int sampleCount)
{
    // TODO make sure count > 0, sampleCount > 0, and sampleCount <= count
    if (sampleCount == 1) return new[] { startNumber };
    var spacing = count / (sampleCount - 1); // minus 1 because there is one
                                             // fewer gaps than samples
    return Enumerable.Range(0, sampleCount)
        .Select(x => startNumber + x * spacing);
}