سؤال

لدي القليل من المشكلة. أنا أضيف أرقام إلى ArrayList مثل 156 ، 340 (عندما يكون TransferIn أو Buy) وما إلى ذلك وبعد ذلك أزلتهم يفعلون ذلك مثل 156 ، 340 (عندما يكون ذلك TransferOut, Sell). يتبع الحل من أجل ذلك دون مشكلة. المشكلة التي لدي هي أنه بالنسبة لبعض البيانات القديمة ، كان الموظفون يدخلون Sum مثل 1500 بدلاً من 500+400+100+500. كيف يمكنني تغييره بحيث عندما يكون هناك بيع/نقل ولا يتطابق داخل قائمة ArrayList ، يجب أن تحاول إضافة عناصر متعددة من قائمة ArrayList وإيجاد العناصر التي تتحد في الإجمالي.

   ArrayList alNew = new ArrayList();
   ArrayList alNewPoIle = new ArrayList();
   ArrayList alNewCo = new ArrayList();
   string tempAkcjeCzynnosc = (string) alInstrumentCzynnoscBezNumerow[i];
   string tempAkcjeInId = (string) alInstrumentNazwaBezNumerow[i];
   decimal varAkcjeCena = (decimal) alInstrumentCenaBezNumerow[i];
   decimal varAkcjeIlosc = (decimal) alInstrumentIloscBezNumerow[i];
   int index;
   switch (tempAkcjeCzynnosc) {                  

          case "Sell":
          case "TransferOut":
          index = alNew.IndexOf(varAkcjeIlosc);
          if (index != -1) {
              alNew.RemoveAt(index);
              alNewPoIle.RemoveAt(index);
              alNewCo.RemoveAt(index);
          } else {
              // Number without match encountred
          }
          break;

          case "Buy":
          case "TransferIn":
               alNew.Add(varAkcjeIlosc);
               alNewPoIle.Add(varAkcjeCena);
               alNewCo.Add(tempAkcjeInId);
               break;
    }
}
هل كانت مفيدة؟

المحلول

هذا هو تباين في مشكلة Quandsack تسمى مشكلة مجموع المجموعة. تحقق من إجابتي هنا لحلول متعددة. للحصول على العناصر الفعلية التي تحتاج إلى إزالتها إذا كنت تستخدم نهج البرمجة الديناميكية ، ما عليك سوى الاحتفاظ بمجموعة ثانية تخبرك بما هو آخر عنصر أضفته للحصول على مبلغ معين ، ثم يمكنك استخدام ذلك للعثور على الحل. انشر مرة أخرى إذا لم تتمكن من العمل. إذا كان لديك الكثير من الأرقام ، أقترح الخوارزمية العشوائية على أي حال ، فمن الأسهل تنفيذها والمزيد من الذاكرة والكفاءة في الوقت (عادة).

نصائح أخرى

قد يكون هذا أكثر صعوبة مما تعتقد:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top