2015-05-27 3 views
-7

мне нужно два списка в качестве выхода, один из которых является список индекса, а другой имеет соответствующее значение, пока условие выполняется ..список или словарь в C#

//initializing the first value of TotalDebts 
double TotalDebts = 30000; 
for (int i = 0; i < 250; i++) 
{ 
    if (TotalDebts > 0) 
    { 
     double DebtsLessIncome = Convert.ToDouble(TotalDebts - 1000); 
     double InterestCharged = Convert.ToDouble((DebtsLessIncome * 5)/100); 
     double InterestDebt = Convert.ToDouble(DebtsLessIncome + InterestCharged); 
     double InterestDebtMLE = Convert.ToDouble(InterestDebt + 500); 
     double TotalDebts = Convert.ToDouble(InterestDebtMLE); 
     //how to add TotalDebts in list or dictionary from each loop as index 0,1,2 and so on 
     List<double> AllDebits = new List<double>(); 
     AllDebits.Add(TotalDebts); 
     // how to retrieve each index and value and store index in one list and value in second list 
    } 
} 
+5

Вы обновляете AllDebits внутри цикла, так что он будет уничтожен каждый раз. Переместите его за пределы цикла for. – MatthewMartin

ответ

0

Я хотел бы использовать список кортежей, как это:

double TotalDebts = 30000; 
list<Tuple<int, double>> AllDebits = new list<Tuple<int, double>>(); 
for (int i = 0; i < 250; i++) 
{ 
    if (TotalDebts > 0) 
    { 
     double DebtsLessIncome = Convert.ToDouble(TotalDebts - 1000); 
     double InterestCharged = Convert.ToDouble((DebtsLessIncome * 5)/100); 
     double InterestDebt = Convert.ToDouble(DebtsLessIncome + InterestCharged); 
     double InterestDebtMLE = Convert.ToDouble(InterestDebt + 500); 
     TotalDebts = Convert.ToDouble(InterestDebtMLE); 
     AllDebits.Add(new Tuple<int,double>(i, TotalDebts)); 
    } 
} 

Это действительно зависит от того, что вы будете использовать это для. Если данные действительно просто отображаются в списке, тогда это нормально. Однако, если индекс должен использоваться для чего-то еще (возможно, возможно?), То словарь (как и ответ fubo) будет намного лучше, поскольку индекс имеет смысл и должен быть уникальным (словари не позволяют дублировать ключи) ,

5

основе «, как извлекать каждый индекс и значение "- я предполагаю, что вы хотите получить доступ к данным по индексу (= год?) - словарь отлично подходит для этого.

double TotalDebts = 30000; 
Dictionary<int, double> dResult = new Dictionary<int, double>(); 
for (int i = 0; i < 250; i++) 
{ 
    if (TotalDebts > 0) 
    { 
     double DebtsLessIncome = Convert.ToDouble(TotalDebts - 1000); 
     double InterestCharged = Convert.ToDouble((DebtsLessIncome * 5)/100); 
     double InterestDebt = Convert.ToDouble(DebtsLessIncome + InterestCharged); 
     double InterestDebtMLE = Convert.ToDouble(InterestDebt + 500); 
     TotalDebts = Convert.ToDouble(InterestDebtMLE); 
     dResult.Add(i, TotalDebts); 
    } 
} 

Примечание

  • Dictionary не поддерживает упорядоченные итерации, так что если вам нужно выводить список года/долговые пары используют какую-либо другая структуру данных (т.е. List<KeyValuePair<int, decimal>>).
  • обычно использовали бы decimal за денежные значения вместо float/double.

Update (сплит словарь в 2 списках)

List<int> lIndex = dResult.Select(x => x.Key).ToList(); 
List<double> lDepts = dResult.Select(x => x.Value).ToList(); 
+0

BTW, рассмотрите возможность удаления этого дополнительного 'Convert.ToDouble' из кода. –

+0

@PrakashKandel - если вам нужны отдельные списки, то создайте их из Словаря следующим образом: Список indexes = AllDebits.Select (x => x.Key) .ToList(); Для дебетов просто переключите «x.Key» на «x.Value» и сделайте список типа double (или десятичным, если вы переключитесь на него). – sr28

+0

Спасибо, что он работает –