2017-11-02 10 views
2

Deedle 시리즈의 첫 번째 누락 값을 찾아야합니다. 나는 아래 보이는 함수를 작성할 수 있었다. Deedle이 더 좋은 방법을 가지고 있는지, 더 일반적으로 누락 된 (또는 누락되지 않은) 값의 모든 키를 반환하는 빠른 함수가 궁금합니다.Deedle Series에서 누락 된 값의 첫 번째 키를 찾는 더 좋은 방법이 있습니까?

let firstMissing (s: Series<'a,_>) = 
let e = (s.Keys).GetEnumerator() 

let rec loop() = 
    if e.MoveNext() then 
     if s |> Series.has e.Current then loop() 
     else e.Current |> Some 
    else None 

loop() 

let s2 = Series.ofOptionalObservations [ 1 => Some(1.0); 2 => None ] 
// val it : Series<int,float> = 
    series [ 1 => 1; 2 => <missing>] 
firstMissing s2 
val it : int option = Some 2 

let s4 = Series.ofValues [1..4] 
firstMissing s4 
val it : int option = None 

답변

3

난 당신이 값이없는 하나를 찾을 때까지 키를 스캔보다 주로 다른 옵션이 있다고 생각하지 않지만, 당신이 더 잘 키 시퀀스를 반환 Series.observationsAll를 사용 할 수있는, 쌍 옵션 값 :

s2 |> Series.observationsAll |> Seq.tryPick (function (k, None) -> Some k | _ -> None) 

모든 키 그렇지 않으면 값없이 첫 번째 키 값과 Some k이있는 경우이 None 반환합니다.

+0

감사합니다. 나는 'Series.observationsAll'에 대해 몰랐다. 놀랍게도 제가 사용한 방법은'Series.observationsAll'을 사용하는 것보다 약 20 % 빠릅니다. – Soldalma