2 Mart 2014 Pazar

Range

Aşağıda range kullanabileceğimiz çeşitli sınıflar var.

Algoritmalar
Aşağıda range'ler ile kullanılan algoritmalarla ilgili notlarım var.
Range'i Bölümlere Ayırma
İlk elemanını bir header gibi her bölümün başına ekleyerek bölümlere ayırma örneği
List list = ...;
int partitionLength = ...
Group g = new Group();
AddInitial (g,list);

int groupLenth = partitionLength - 1;
int lastIndex = list.Count - 1;
for (int index = 1; index < list.Count; index++){
 AddGroup (g,list [ index ] );
 if (IsRepeatBoundary (groupLenth, index)){
   groupList.Add (g);
   g = new Group ();
   if (! LastMessage (lastIndex, index)){
     AddInitial (g,list);
   }
 }//Boundary
}//For

if (g.Count != 0)
{
  groupList.Add (g);
}

 
boost::irange

Örnek'te s setinde olmayan sayılar resultVector'e ekleniyor.
Buradaki soruda da açıklandığı gibi irange verilen aralık için hafıza harcıyor. counting_range ise harcamıyor.

boost::make_iterator_range
Verilen iki iterator range haline getirilerek algoritmalarda kullanılabilir. Örnek:

std::vector<std::string> s { "bob", "hey", "joe", "doe" };
std
::vector<std::string> d;

for (auto i = std::begin(s); i != std::end(s); ++i) {
d
.push_back(boost::algorithm::join(
boost
::make_iterator_range(std::begin(s), i + 1),
std
::string(" ")
));
}
Guava RangeSet
Range sadece bir aralığı saklarken RangeSet birden fazla aralığı saklayabilir.
RangeSet<Integer> rangeSet = TreeRangeSet.create();
rangeSet.add(Range.closed(1, 10)); // {[1, 10]}
rangeSet.add(Range.closedOpen(11, 15)); // {[1, 10], [11, 15)}
rangeSet.contains (11);//true 
Buradaki soruda RangeSet sınıfına erişim yoksa kullanılabilecek bir çözüm de verilmiş.

Guava Ranges
Ranges sınıfı boost::irange sınıfını andırıyor.RangesExplained başlıklı sayfada kullanım örnekleri mevcut.
Does guava provide any support for defining ranges of characters? sorusuna verilen cevap ise aşağıda.

hasLowerBound
Verilen range nesnesinin alt sınırı olup olmadığını döner.

lowerBoundType
Verilen range nesnesinin alt sınırı varsa, sınırın dahil olup olmadığını döner. Örnekte alt sırın kontrolü gösterilmiş.

    
Apache Commons
Bu sınıf ile verilen aralıkta sayıları tutan bir nesne yaratılır. Örnek:

C#
Repeat metodu
Örnekte array aynı nesne ile dolduruluyor.
var columns = Enumerable.Repeat(new MyClass(), 10).ToArray();
Range metodu
var nums = Enumerable.Range(0, 10).ToArray();
for (int i = 0;i < nums.Length;++i){} 
Örnekte array farklı nesneler ile dolduruluyor.

var columns = Enumerable.Repeat(0, 10).Select(i => new MyClass()).ToArray();

Hiç yorum yok:

Yorum Gönder