簡體   English   中英

迭代元組中的項目

[英]Iterate over items in Tuple

我有三個循環的方法:

    public void Print(Tuple<List<DateTime>, List<double>, List<string>> dataToPrint)
    {
        foreach (var item in dataToPrint.Item1)
        {
            Console.WriteLine(item);
        }
        foreach (var item in dataToPrint.Item2)
        {
            Console.WriteLine(item);
        }
        foreach (var item in dataToPrint.Item3)
        {
            Console.WriteLine(item);
        }
    }

是否可以只使用一個循環來打印屏幕上列表內容的所有項目?

當然,您可以將所有列表連接成一個objectstring項目序列,但這種串聯不會使您的代碼更具可讀性。 但您可以創建簡單的擴展方法,將任何序列的內容轉儲到控制台:

public static void Dump<T>(this IEnumerable<T> source)
{
    foreach(var item in source)
       Console.WriteLine(item);
}

你的代碼看起來像(根本沒有循環):

public void Print(Tuple<List<DateTime>, List<double>, List<string>> dataToPrint)
{
    dataToPrint.Item1.Dump();
    dataToPrint.Item2.Dump();
    dataToPrint.Item3.Dump();
}

我還將使用命名參數,自定義類型或值元組將這三個值傳遞給方法。

是的,但您必須確保所有列表具有相同的長度。
你基本上可以這樣做:

for (var i = 0; i < dataToPrint.Item1.Length; i++)
{
    Console.WriteLine(dataToPrint.Item1[i]);
    Console.WriteLine(dataToPrint.Item2[i]);
    Console.WriteLine(dataToPrint.Item3[i]);
}

編輯:在日期時間列表上調用ForEach(Console.WriteLine)實際上不會起作用,因為Console.WriteLine沒有特定的覆蓋,該覆蓋需要一個日期時間,它只使用獲取對象的覆蓋。 由於List.ForEach期望一個Action和編寫日期時間所需的Console.WriteLine方法實際上是一個Action,這段代碼不會編譯,所以這個答案是不正確的。 但是我覺得它很有意思,為什么它不會工作,所以我會留在這里

我不確定為什么你的代碼有問題。 如果那是方法的簽名而你無法改變它那么對我來說似乎是有效的。 如果由於某種原因你真的想限制你的行代碼,你可以這樣做

dataToPrint.Item1.ForEach(Console.WriteLine);
dataToPrint.Item2.ForEach(Console.WriteLine);
dataToPrint.Item3.ForEach(Console.WriteLine);

其他一些人建議所有列表的for循環長度相同但這將以與您描述的順序不同的順序打印出來。 並將所有列表中的所有項目轉換為對象,因此您可以將列表設置為高成本,這要歸功於將值類型設置為double。 編輯:我已經被告知,與寫入控制台的性能相比,拳擊可能是微不足道的。 然而,我仍然認為將它們全部投射到對象不是最好的選擇,但那只是我

嘗試這個:

foreach (var element in dataToPrint.Item1.Cast<object>().Concat(dataToPrint.Item2.Cast<object>()).Concat(dataToPrint.Item3.Cast<object>()))
{
    Console.WriteLine(element);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM