【问题标题】:How to print two list results together [duplicate]如何一起打印两个列表结果[重复]
【发布时间】:2014-06-18 05:29:19
【问题描述】:

我有两个列表

foreach (var a in _teams)
{
    Console.WriteLine(a);
}

foreach (var b in _wins)
{
    Console.WriteLine(b);
}

每个列表都有相同数量的值。现在我正在单独打印每个值,但是我如何一起打印 a 或 b 的每个值。

_teams 列表返回澳大利亚、英格兰、美国 _wins 列表返回 5,6,7

我想这样打印澳大利亚 5、英格兰 6、美国 7

更新 * 我正在创建 xml 节点,所以基本上我不想将它打印在一起。我想要像这样的价值观 澳大利亚比 5 比英格兰比 6 以此类推,我将创建类似的 xml 节点

<Team>Australia</Team>
<Win>5</Win>
<Team>England </Team>
<Win>6</Win>

...等等

【问题讨论】:

  • 使用索引for 循环?或者更好的是,将这些信息组合到一个类中并将 那些 存储在列表中。
  • 列表有哪些类型?列出 或 Something[]?
  • 查看Enumerable.Zip
  • 我已经更新了我的问题很抱歉我没有很好地解释我的问题你能看到我更新的问题吗

标签: c# .net c#-4.0 c#-3.0


【解决方案1】:

试试这个:

foreach (var a in _teams.Zip(_wins, (t, w) => new { t, w }))
{
    Console.WriteLine(a.t + " " + a.w);
}

【讨论】:

    【解决方案2】:

    这个怎么样:

    for(i = 0; i < _teams.Length; i++)
    {
        Console.Write(_teams[i] + " ");
        Console.Write(_wins[i]);
        if(i < _teams.Length - 1)
            Console.Write(",");
    }
    

    【讨论】:

      【解决方案3】:

      我建议查看 IEnumerable 上的 zip 函数。像这样的:

      var lst1 = new List<string>(){"One", "Two","Three"};
      var lst2 = new List<string>(){"A", "B","C"};
      var combined = lst1.Zip(lst2, (fst,snd) => {return fst + ":" + snd;});
      foreach (var item in combined)
      {
          Console.WriteLine (item);
      }
      

      Zip 将采用两个单独的列表,并允许您在两者中构建一个视图。

      【讨论】:

        【解决方案4】:

        你可以使用下面提到的代码

                List<string> _terms = new List<string>();
                List<string> _wins = new List<string>();
                _terms.Add("Australia");
                _wins.Add("5");
                using (var e1 = _terms.GetEnumerator())
                using (var e2 = _wins.GetEnumerator())
                {
                    while (e1.MoveNext() && e2.MoveNext())
                    {
                        var item1 = e1.Current;
                        var item2 = e2.Current;
        
                        // use item1 and item2
                    }
                }
        

        【讨论】:

          【解决方案5】:

          你可以使用 for 循环...

          for (int i = 0; i < teams.Count; i++)
          {
              Console.WriteLine(_teams[i]);
              Console.WriteLine(_wins[i]);
          }
          

          ...但字典是更好的解决方案:

          Dictionary<string, int> _teams = new Dictionary<string, int>();
          _teams.Add("Australia", 5);
          _teams.Add("England", 6);
          ...
          foreach( KeyValuePair<string, int> kvp in _teams )
          {
              Console.WriteLine("{0} {1}", kvp.Key, kvp.Value);
          }
          

          MSDN Dictionary

          【讨论】:

            【解决方案6】:

            试试这个:

            _teams.ForEach(x => Console.WriteLine(x +" " + _wins[_teams.IndexOf(x)]));
            

            我们使用IndexOf方法从_teams获取当前字符串的索引,并获取_wins索引处的元素。

            但是,如果这是团队之间的 1 对 1 映射并且它获胜,Dictionary 将是我的首选数据结构。

            【讨论】:

              猜你喜欢
              • 2020-04-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多