【问题标题】:Generate List with Every Combination between two variables使用两个变量之间的每个组合生成列表
【发布时间】:2018-04-08 07:37:12
【问题描述】:

如何使用A00B00A100B100 之间的每个组合自动生成List<string>

我想应该是 10,100 项。

所以列表将包含:

A00B00
A00B01
A00B02
...
A01B00
A01B01
A01B02
...
A100B98
A100B99
A100B100

它需要保持AxxBxx 格式。我不希望它像0A01B0 那样被打乱。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @Dan 我只知道如何用Enumerable.Range(0,100) 制作一个空列表。
  • for (int i = 0 i < 101; i++){for (int j = 0; j < 101; j++){yourList.Add(string.Format("A{0:00}B{1:00}", i, j));}}
  • 所以都在 0 到 100 之间?
  • @StephenMuecke 它看起来工作正常,谢谢。 rextester.com/QMR26498

标签: c# arrays list


【解决方案1】:

由于您有一个0-100 的范围,而您只有AB 作为前缀,我们使用0 to 100 中的ints 填充两个列表,然后使用System.Linq 查找所有组合然后附加到带有分隔符的list。现在只需更换分隔符。

有很多方法可以解决,我建议使用System.Linq

public static IEnumerable<string> FindAllCombinationsAnotherWay()
{
    List<int> ListOne = Enumerable.Range(1, 100).ToList();
    List<int> ListTwo = Enumerable.Range(1, 100).ToList();

    var result = ListOne.SelectMany((a, indexA) =>
             ListTwo.Where((b, indexB) =>
                    ListTwo.Contains(a) ? !b.Equals(a) && indexB > indexA
                                      : !b.Equals(a))
                  .Select(b => string.Format("A{0:00}B{1:00}", a, b)));

    return result.Distinct();
}

【讨论】:

    【解决方案2】:

    您可以轻松实现:

    var result = new List<string>();
    foreach (var i in Enumerable.Range(0, 101))
    {
        foreach (var j in Enumerable.Range(0, 101))
        {
            result.Add($"A{i:00}B{j:00}");
        }
    }
    

    【讨论】:

      【解决方案3】:

      这种组合称为Cartesian products,这是另一种 LINQ 解决方案:

      var lst = Enumerable.Range(0, 101)
                        .SelectMany(a => Enumerable.Range(0, 101).Select(b => $"A{a:00}B{b:00}"))
                        .ToList();
      

      【讨论】:

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