SORU
1 Temmuz 2009, ÇARŞAMBA


Düzenleme sözlük foreach döngüsü değerleri

Sözlükten bir pasta grafik oluşturmak için çalışıyorum. Pasta grafiği ben görüntülemeden önce, veri çeki düzen vermeni istiyorum. Pasta 5'inden daha az olacak herhangi bir pasta dilimi kaldırıp "" pasta dilimi. Diğer kumbaraya atacağım Ancak çalışma zamanı Collection was modified; enumeration operation may not execute bir istisna alıyorum.

Onları üzerinden yineleme sırasında veya sözlük öğeleri ekleyebilir veya kaldırabilirsiniz değil anlıyorum. Ancak sadece foreach döngü içinde varolan bir anahtar değeri değiştiremezsiniz anlamıyorum.

Re öneriniz: Şifremi sabitleme, mutluluk duyacağız.

Dictionary<string, int> colStates = new Dictionary<string,int>();
// ...
// Some code to populate colStates dictionary
// ...

int OtherCount = 0;

foreach(string key in colStates.Keys)
{

    double  Percent = colStates[key] / TotalCount;

    if (Percent < 0.05)
    {
        OtherCount  = colStates[key];
        colStates[key] = 0;
    }
}

colStates.Add("Other", OtherCount);

CEVAP
1 Temmuz 2009, ÇARŞAMBA


Sözlük bir güncellemeler değeri kendi iç "numarası yineleyici ve herhangi bir yineleyici anahtarları veya değerleri toplama ile ilişkili geçersiz kılar." - sürüm ayarı

Söylemek istediğinizi anladım, ama aynı zamanda eğer değerleri toplama mid-yineleme - değişiklik olsaydı tuhaf olurdu ve sadelik için sadece bir sürüm numarası var.

Normal şekilde tamir bu tür bir şey için ya da kopya koleksiyonu anahtarları önceden ve üzerinde yineleme, kopyalama, ya da üzerinde yineleme orijinal koleksiyon ama korumak bir koleksiyon değiştiren ulaşabilirsiniz uyguladıktan sonra bitti yineleme.

Örneğin:

Kopyalama önce anahtarları

List<string> keys = new List<string>(colStates.Keys);
foreach(string key in keys)
{
    double percent = colStates[key] / TotalCount;    
    if (percent < 0.05)
    {
        OtherCount  = colStates[key];
        colStates[key] = 0;
    }
}

Ya da...

Değişiklik listesi oluşturmak

List<string> keysToNuke = new List<string>();
foreach(string key in colStates.Keys)
{
    double percent = colStates[key] / TotalCount;    
    if (percent < 0.05)
    {
        OtherCount  = colStates[key];
        keysToNuke.Add(key);
    }
}
foreach (string key in keysToNuke)
{
    colStates[key] = 0;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • dirkgently1

    dirkgently1

    13 NİSAN 2006
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009