A var List<String>
ve bu listeden bir alt liste çıkarmam gerekiyor. NET 3.5'te bunun için herhangi bir List yöntemi var mı?
A var List<String>
ve bu listeden bir alt liste çıkarmam gerekiyor. NET 3.5'te bunun için herhangi bir List yöntemi var mı?
Yanıtlar:
List :: GetRange (firstIndex, count) istiyorsunuz. Bkz. Http://msdn.microsoft.com/en-us/library/21k0e39c.aspx
// I have a List called list
List sublist = list.GetRange(5, 5); // (gets elements 5,6,7,8,9)
List anotherSublist = list.GetRange(0, 4); // gets elements 0,1,2,3)
Peşinde olduğun bu mu?
Alt liste öğelerini orijinal listeden silmek istiyorsanız, şunları yapabilirsiniz:
// list is our original list
// sublist is our (newly created) sublist built from GetRange()
foreach (Type t in sublist)
{
list.Remove(t);
}
Listenizde LINQ sorgusu çalıştırmak kadar kolay olur mu?
List<string> mylist = new List<string>{ "hello","world","foo","bar"};
List<string> listContainingLetterO = mylist.Where(x=>x.Contains("o")).ToList();
subList
orijinal listeye değişebilir bir bakış açısı getiren Java'ya benzer bir şey arıyordum . Bu farklı davranıyor, ki bu hemen belli olmayabilir, bu yüzden bunu daha sonra gören herkesin yararına bunu belirtmenin yararlı olacağını düşündüm. Konu dışında, yoga ya da meditasyon ya da başka bir şey yapmak isteyebilirsiniz; hiçbir provokasyon olmaksızın delirmeye 0 gittin.
LINQ'daki Where cümlesini kullanın:
List<object> x = new List<object>();
x.Add("A");
x.Add("B");
x.Add("C");
x.Add("D");
x.Add("B");
var z = x.Where(p => p == "A");
z = x.Where(p => p == "B");
Yukarıdaki ifadelerde "p" listede bulunan nesnedir. Yani bir veri nesnesi kullandıysanız, yani:
public class Client
{
public string Name { get; set; }
}
o zaman linq'iniz şöyle görünür:
List<Client> x = new List<Client>();
x.Add(new Client() { Name = "A" });
x.Add(new Client() { Name = "B" });
x.Add(new Client() { Name = "C" });
x.Add(new Client() { Name = "D" });
x.Add(new Client() { Name = "B" });
var z = x.Where(p => p.Name == "A");
z = x.Where(p => p.Name == "B");
LINQ ile:
List<string> l = new List<string> { "1", "2", "3" ,"4","5"};
List<string> l2 = l.Skip(1).Take(2).ToList();
Foreach'e ihtiyacınız varsa, ToList'e gerek yoktur:
foreach (string s in l.Skip(1).Take(2)){}
LINQ'nun avantajı, yalnızca bazı ana öğeleri atlamak istiyorsanız, şunları yapabilirsiniz:
List<string> l2 = l.Skip(1).ToList();
foreach (string s in l.Skip(1)){}
yani, sayı / uzunluk vb. ile ilgilenmeye gerek yoktur.
Koleksiyon sınıfınız, filtreyi tanımlamak için aktarılan ölçütlere göre bir koleksiyon (alt liste) döndüren bir yönteme sahip olabilir. Foreach döngüsü ile yeni bir koleksiyon oluşturun ve dağıtın.
Veya yöntemin ve döngünün "filtrelenmiş" veya "etkin" bir bayrak (özellik) ayarlayarak mevcut koleksiyonu değiştirmesini sağlayın. Bu işe yarayabilir, ancak çok iş parçacıklı kodda sorunlara da neden olabilir. Koleksiyonun içeriğine başka nesneler bağlıysa, bu, verileri nasıl kullandığınıza bağlı olarak iyi veya kötü olabilir.
Bir alt listedeki öğeleri ters çevirin
int[] l = {0, 1, 2, 3, 4, 5, 6};
var res = new List<int>();
res.AddRange(l.Where((n, i) => i < 2));
res.AddRange(l.Where((n, i) => i >= 2 && i <= 4).Reverse());
res.AddRange(l.Where((n, i) => i > 4));
0,1,4,3,2,5,6 verir
Range
tamsayı veri türüyle doğrudur. veri türünüz ise DataTime
ve iki belirli tarih arasındaki kayıtların bir listesini almanız gerekiyorsa ne olur ?