.Skip()
및 .Take()
의 임의의 체인을 .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;
}
}
이 올바른 알고리즘이 경우 제가 확인할 수있는 방법 어떤 생각?
호기심에서 벗어나이게 무슨 용도로 사용됩니까? –
@NickLarsen : LINQ 쿼리 공급자를 구현 중이며 Skip 및 Take 호출을 단일 오프셋/개수 쌍으로 변환해야합니다. – dtb
그들이 어떻게 행동하는지 잘 모르겠지만 추측 된 논리에 따르면 나는 당신이 .Skip (5)을 가져야한다고 믿는다. (7) .Take (3) => .Skip (5) .Take (3) 4). 당신도 코드가이 값을주는 것처럼 보입니다. 나는 정확하다고 믿습니다. – rslite