Merhaba çocuklar Listesi
DÜZENLEME: Hala henüz .net hiçbir Lambda ifadesi 2.0 kullanıyorum arada .
DÜZENLEME 2: cevap için teşekkürler. Sanırım onunla döngü halinde kaldım ama onu eskisinden çok daha iyi yapmak için güzel bir yol buldum.
Merhaba çocuklar Listesi
DÜZENLEME: Hala henüz .net hiçbir Lambda ifadesi 2.0 kullanıyorum arada .
DÜZENLEME 2: cevap için teşekkürler. Sanırım onunla döngü halinde kaldım ama onu eskisinden çok daha iyi yapmak için güzel bir yol buldum.
Değil Nesnelerin ve nesnelerin listesinde hangi türlerin eksik olduğunu görmek istersiniz. Bu doğru mu? Eğer öyleyse, bu durumda, sadece float
için türünü içeren bir dizi neden olacaktır, bu
List<Type> types = new List<Type>() { typeof(int), typeof(double), typeof(float) };
List<object> objects = new List<object>() { 1, 2, 3, 2d, 4d };
var missingTypes = types.Except(objects.Select(obj => obj.GetType()));
gibi bir şey aramayı olabilir. LINQ kullanarak, döngü halindesiniz ama soyutlanmış durumda.
Düzenleme: .NET 2.0'da, eksik türlerinizi almak için aşağıdaki gibi bir şey yapabilirsiniz. Hala dönüyorsun, ama çok da kötü değil. Bunu daha iyi yazabiliyor olabilirsiniz, ve 3.5 + 'da (LINQ olmasa bile) daha iyi yazabilirsin, ama başlaman gerek.
static IEnumerable<Type> GetMissingTypes(IEnumerable<Type> types, List<object> objects)
{
List<Type> existingTypes = objects.ConvertAll(delegate(object obj) { return obj.GetType(); });
foreach (Type type in types)
{
if (!existingTypes.Contains(type))
yield return type;
}
}
// ...
List<Type> types = new List<Type>() { typeof(int), typeof(double), typeof(float) };
List<object> objects = new List<object>() { 1, 2, 3, 2d, 4d };
IEnumerable<Type> missingTypes = GetMissingTypes(types, objects);
Böyle IEnumerable.Except kullanabilirsiniz: Ne soruyorsun ne tam anlamada değilim, ama sonra bir türlerinin listesi ve bir liste var düşünmek emin
requirements.Except(userProvided,
delegate (T req, T user)
{
req.GetType().Equals(user.GetType());
});
Bu uzantı yöntemi .NET 2.0'da bulunmamaktadır. –
Sıkıştırma döngüsü ne olursa olsun. Senkronize şeker ya da değil, ya kodda bir döngü ya da derleyici tarafından bir döngü.
jtdubs sadece 2.0 dışındaki bir yöntemi kullanarak, doğru yolda olduğunu. Bir koleksiyonda dolaşın ve bir diğer dilde Find örneklerine Öntanımlı olarak bir temsilci kullanın. En güzel değil ama 2.0 koleksiyon manipülasyonu ile uğraşırken oldukça tıknazdı. Neyse ne.
Döngüden ziyade, bir sıralama yapabilir ve sonra karşılaştırabilirsiniz. Sizden herhangi bir kod örneği olmadan, hepimiz tahmin etmeye devam edebiliriz. "Item class type" ifadenizi string olarak kullanabilir misiniz? Öyleyse bir sıralama ve karşılaştırma daha hızlı olacaktır ve siz de döngü yapmayacaksınız.
Kaç öğe liste halinde bahsediyoruz?
Linq için teşekkür hazırlanırken, dikkate reqs
gereksinimleri ve list
kullanıcı kaynaklı ürün aşağıdaki
string[] reqs = { "A", "C", "E", "Z" };
string[] list = { "A", "E", "Z", "C" };
string[] unmet = Array.FindAll(reqs,
delegate(string item)
{
return !Array.Exists(list, item.Equals);
});
bool all_done = unmet.Length == 0;
. Array
sınıfının, diziler ön dizisini teslim etmek için birçok statik yöntemi vardır. Onlar eksik ne söyleyecektir unmet
dizisi
.NET 2.0 hayat kurtarıcı olarak bunları kullanın.
Her iki listenin örneklerini gönderin ve örnek kodunuz varsa, döngü ile nasıl çalışır, o zaman insanlar daha az döngü veya gizli döngü ile en iyi duruma getirmenize yardımcı olabilir (ancak hayır, listelerde döngü yapmadan tamamen yapamazsınız)). –