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:
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ınırın kontrolü gösterilmiş.
Apache Commons
Bu sınıf ile verilen aralıkta sayıları tutan bir nesne yaratılır. Örnek:
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.
Buradaki soruda RangeSet sınıfına erişim yoksa kullanılabilecek bir çözüm de verilmiş.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
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.
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ını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
Örnekte array farklı nesneler ile dolduruluyor.var nums = Enumerable.Range(0, 10).ToArray();
for (int i = 0;i < nums.Length;++i){}
var columns = Enumerable.Repeat(0, 10).Select(i => new MyClass()).ToArray();
Hiç yorum yok:
Yorum Gönder