[英]How to loop through an array of parameters and relate them to each other
我試圖遍歷一系列參數,並按它們遍歷的順序將它們與另一個參數關聯(該類的類型為Payment類型,屬性類型SupplementalPayment也類型為Payment)。 因此,對於4次付款,付款4將與付款3相關聯,付款3將與付款2相關聯,依此類推。
我無法使其使用無限數量的參數來做到這一點。
這就是我現在使用的方法的位置:
private Payment SortPayments(params Payment[] payments)
{
Payment parentPayment, lastPayment;
lastPayment = parentPayment = null;
foreach (Payment currentPayment in payments)
{
if (currentPayment != null)
{
lastPayment = currentPayment;
if (parentPayment == null)
{
parentPayment = lastPayment;
}
else if(parentPayment.SupplementalPayment == null)
{
parentPayment.SupplementalPayment = lastPayment;
}
else if (parentPayment.SupplementalPayment.SupplementalPayment == null)
{
parentPayment.SupplementalPayment = lastPayment;
}
else if (parentPayment.SupplementalPayment.SupplementalPayment.SupplementalPayment == null)
{
parentPayment.SupplementalPayment.SupplementalPayment.SupplementalPayment = lastPayment;
}
}
}
return parentPayment;
}
如您所見,它不是動態的,最多只能進行四次補充付款。 任何人都知道如何去做嗎?
也許我根本不理解您的問題,但您只是想將每筆付款與下一筆付款聯系起來。 在這種情況下,一個簡單的for循環就足夠了:
private Payment SortPayments(params Payment[] payments)
{
if(payments.Length == 0) return null;
for(int i = 0; i < payments.Length - 1; i++)
payments[i].SupplementalPayment = payments[i + 1]
return payments[0];
}
也許您可以使用循環執行以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Payments
{
class Program
{
static void Main(string[] args)
{
Payment p1 = new Payment();
Payment p2 = new Payment();
Payment p3 = new Payment();
Payment Sorted = SortPayments(p1, p2, p3);
}
static private Payment SortPayments(params Payment[] payments)
{
if(payments.Length == 0)
{
return null;
}
Payment FirstPayment = payments[0];
Payment current = FirstPayment;
for (int i = 1; i < payments.Length; i++ )
{
current.SupplementalPayment = payments[i];
current = current.SupplementalPayment;
}
return FirstPayment;
}
}
}
有無數種方法。 首先想到的是遞歸和有效參數的堆棧(可能不是遙不可及的)。 只需將數據整理到一個列表列表中即可。 遞歸函數“訪問”遍歷一個列表,將元素壓入堆棧,並調用訪問下一個列表,直到沒有要訪問的列表為止。 最后,您將獲得一系列相關元素。
重復調用后,您將從堆棧中彈出。 這需要打磨,但是您知道了。
謝謝你們的反饋。 這就是我最終得到的。 唯一的區別是答案是輸入的某些參數為空。
private Payment SortPayments(params Payment[] payments)
{
for (int i = 0; i < payments.Length - 1; i++)
{
if (payments[i + 1] != null)
{
payments[i].SupplementalPayment = payments[i + 1];
}
else
{
int j = 1;
while (true)
{
if (payments[i + j] == null)
{
j++;
}
else
{
payments[i].SupplementalPayment = payments[i + j];
i += j;
}
}
}
}
return payments[0];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.