2015-02-01 20 views
5

Bir Range oluşturmak ve o aralıkta bir değişken içerip içermediğini test etmek istiyorum. Bu benzeyen birşey:Bir değerin bir Aralık içinde olup olmadığını nasıl test edebilirim?

fn main() { 
    let a = 3..5; 
    assert!(a.contains(4)); 
} 

Şu anda gördüğüm tek bariz şey Iterator::any kullanmaktır. o (1) işlemi bir O alıp yapacak, çünkü bu çirkin o O (n):

fn main() { 
    let mut a = 3..5; 
    assert!(a.any(|v: i32| v == 4)); 
} 
+0

Bunun için 'İçerir 've' İçinde 'özelliklerini sağlayan bir sandığa (' range_check') sahibim. –

cevap

4

Orada Range kendisi (şu anda zaten) hiçbir şey, ama bunu yapmak zor değildir; Sonuçta, sadece karşılaştırmalar bir çift alır: birkaç sürümlerde

4 >= a.start && 4 < a.end 
+0

Bunu eklemek için bir PR'nin (tüm "Range *' structs) karşılığını memnuniyetle karşılayacağını düşünüyor musunuz? – Shepmaster

+2

RFC olmadan olmaz. Açıkçası, gereksiz özellik genişleme 1.0 önce önce olası değildir. Yani, bir RFC yazmanın nispeten kolaydır. – bluss

+0

Negatif sayılardan ne haber? – mkirk

0

, orijinal kod olduğu gibi derlemek olacaktır. Şu anda, Range::contains gece bir özellik olarak mevcut: bu özelliğin

#![feature(range_contains)] 

fn main() { 
    let a = 3..5; 
    assert!(a.contains(4)); 
} 

İstikrar issue 32311 izlenir.

İlgili konular