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

  • Arun Kumar

    Arun Kumar

    18 Mart 2010
  • RaverX DouBle StAg XI

    RaverX DouBl

    23 Mayıs 2008
  • Virtual Riot

    Virtual Riot

    19 Mayıs 2011