gpt4 book ai didi

c# - 规范化 .Skip() 和 .Take() 调用链

转载 作者:太空狗 更新时间:2023-10-29 21:47:45 26 4
gpt4 key购买 nike

我正在尝试规范化 .Skip() 的任意链和 .Take()调用单个 .Skip() 调用,然后是可选的单个 .Take() 调用。

以下是预期结果的一些示例,但我不确定这些是否正确:

.Skip(5)                        => .Skip(5)
.Take(7) => .Skip(0).Take(7)

.Skip(5).Skip(7) => .Skip(12)
.Skip(5).Take(7) => .Skip(5).Take(7)
.Take(7).Skip(5) => .Skip(5).Take(2)
.Take(5).Take(7) => .Skip(0).Take(5)

.Skip(5).Skip(7).Skip(11) => .Skip(23)
.Skip(5).Skip(7).Take(11) => .Skip(12).Take(11)
.Skip(5).Take(7).Skip(3) => .Skip(8).Take(4)
.Skip(5).Take(7).Take(3) => .Skip(5).Take(4)
.Take(11).Skip(5).Skip(3) => .Skip(8).Take(3)
.Take(11).Skip(5).Take(7) => .Skip(5).Take(6)
.Take(11).Take(5).Skip(3) => .Skip(3).Take(2)
.Take(11).Take(5).Take(3) => .Skip(0).Take(3)

谁能确认这些是预期的正确结果?


这是我从示例中得出的基本算法:

class Foo
{
private int skip;
private int? take;

public Foo Skip(int value)
{
if (value < 0)
value = 0;

this.skip += value;

if (this.take.HasValue)
this.take -= value;

return this;
}

public Foo Take(int value)
{
if (value < 0)
value = 0;

if (!this.take.HasValue || value < this.take)
this.take = value;

return this;
}
}

知道如何确认这是否是正确的算法吗?

最佳答案

这是 TDD 的完美场景。鉴于您已经在上面定义了您的规范,这应该小菜一碟作为一系列仅几个测试来实现。

“正确”是相当主观的,但这些例子看起来很正常。

此外,我会将 .Skip(0) 调用标准化。

确保清楚地定义边缘情况。例如,

.Take(11).Skip(12).Take(1)

可能应该规范化为 .Take(0)


编辑:

skip的官方定义:

Bypasses a specified number of elements in a sequence and then returns the remaining elements.

然后采取:

Returns a specified number of contiguous elements from the start of a sequence.

根据您的示例,我认为您的测试用例正确地遵循了规范。

关于c# - 规范化 .Skip() 和 .Take() 调用链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com