【问题标题】:C# Printing out lists | Foreach two listsC# 打印列表 | Foreach 两个列表
【发布时间】:2020-01-10 16:05:01
【问题描述】:

我在打印我的列表时遇到问题,因为我在两个单独的列表中有必要的信息 目前我知道如何从一个列表中打印出来,但不知道如何使用两个列表来打印内容

public static void PregledSvihPolicaOsiguranja()
{
    List<PoliceOsiguranja> lPoliceOsiguranja = DohvatiPoliceOsiguranja();
    List<Klijent> lKlijent = DohvatiKlijente();

    var table = new ConsoleTable("OIB", "Broj Police", "Vrsta Osiguranja", "Ime i prezime", "Datum pocetka", "Datum isteka", "Vrijednost");
    foreach (var PoliceOsiguranja in lPoliceOsiguranja)
    {
            table.AddRow(PoliceOsiguranja.OIB, PoliceOsiguranja.BrojPolice, PoliceOsiguranja.VrstaOsiguranja, PoliceOsiguranja.Ime + " " + PoliceOsiguranja.Prezime, PoliceOsiguranja.DatumPocetka, PoliceOsiguranja.DatumIsteka, PoliceOsiguranja.Vrijednost) ;
    }
    table.Write();
}

这部分 "PoliceOsiguranja.Ime + " " + PoliceOsiguranja.Prezime" 应使用列表 "lKlijent" 并从该 JSON 文件中打印 Ime (name) 和 Prezime (surname)

谢谢!

编辑: 我尝试过使用 Zip,但它不适合我

【问题讨论】:

  • 你能用Zip展示你的尝试吗?此外,您可以只使用常规的for 循环并使用索引...
  • 错误是什么?您是否考虑过在您的 Klijent 和 PoliceOsiguranja 类中使用覆盖 ToString() ?另外,这些类有什么共同点?
  • 尝试使用 Zip 的一堆错误。
  • @Jawad 类有共同的 OIB
  • @cortex 请参阅下面的我的帖子,以便在迭代策略列表时查找客户信息。

标签: c# list foreach printing


【解决方案1】:

如果您有兴趣使用他们的特定政策打印客户,那么也许可以这样做,

    foreach (var client in lKlijent)
    {
        PoliceOsiguranja policy = lPoliceOsiguranja.Where(x => x.OIB == client.OIB).FirstOrDefault();
        table.AddRow(policy.property1, policy.property2, client.property1, client.property2) ;
    }

根据数据的外观,您可能需要运行多个 foreach 循环。如果您为每个客户制定一项政策,则上述方法有效。如果每个策略有一个客户端,则可以翻转循环并将策略用作循环并根据您正在迭代的策略查找客户端。

如果每个策略都有多个客户端,那么最好也使用单独的 foreach 循环。

    foreach (var policy in lPoliceOsiguranja)
        foreach (var client in lKlijent.Where(x => x.OID == policy.OID))
            table.AddRow(policy.property1, policy.property2, client.property1, client.property2);

并且使用相同的逻辑,如果每个客户端有多个策略,则翻转循环并首先迭代客户端,然后迭代匹配 client.OID 的策略。

【讨论】:

    【解决方案2】:

    由于我没有太多关于您的代码的内容,我将为您提供一个更通用的使用 Zip 的示例。比如说这些是你的类

    public class PoliceOsiguranja
    {
        public string OIB { get; set; }
    }
    
    public class Klijent
    {
        public string OIB { get; set; }
    }
    

    我们将创建一个代表组合的新类

    public class Combination
    {
        public PoliceOsiguranja A { get; set; }
        public Klijent B { get; set; }
    }
    

    使用 .Zip,我们会将您的两个列表组合成一个组合列表。假设我们从这些列表开始

    public static List<PoliceOsiguranja> listA = new List<PoliceOsiguranja> 
    {
        new PoliceOsiguranja{ OIB = "PoliceOsiguranja1"},
        new PoliceOsiguranja{ OIB = "PoliceOsiguranja2"},
        new PoliceOsiguranja{ OIB = "PoliceOsiguranja3"},
    };
    public static List<Klijent> listB = new List<Klijent> 
    {
        new Klijent { OIB = "klijent1"},
        new Klijent { OIB = "klijent2"},
        new Klijent { OIB = "klijent3"}
    };
    

    我们可以使用 Zip 来创建一个 IEnumerable 的组合

    IEnumerable<Combination> combinedList 
         = listA.Zip(listB, (a, b) => new Combination { A = a, B = b });
    

    现在我们可以使用它们了

    foreach(Combination item in combinedList)
    {
        Console.WriteLine($"PoliceOsiguranja OIB = {item.A.OIB}, Klijent OIB = {item.B.OIB}");
    }
    

    如果您需要对它们进行排序,比如 OIB,您也可以通过更改为

    IEnumerable<Combination> sortedCombinedList = listA.OrderBy(a => a.OIB).Zip(listB.OrderBy(b => b.OIB), (a, b) => new Combination { A = a, B = b });
    

    但这取决于您的用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多