【问题标题】:Combination of two elements in array [duplicate]数组中两个元素的组合[重复]
【发布时间】:2013-11-22 15:24:13
【问题描述】:

我过去也有类似的问题 - 我有一个包含 n 个元素的数组,我怎样才能从中得到两个元素的所有组合,而不重复?

即。如果数组是这样的:

var arr1 = new[] { "A", "B", "C", "D", "E"};

...结果应该是

AB
AC
AD
AE
BC
BD
BE
CD
CE
CD

你能帮我实现这个吗?

【问题讨论】:

标签: c# arrays


【解决方案1】:

考虑以下代码...

var arr1 = new[] { "A", "B", "C", "D", "E" };
var combinations = new List<string>();
for(int i = 0; i < arr1.Length; i++)
{
    for (int j = i + 1; j < arr1.Length; j++)
    {
        combinations.Add(string.Format("{0}{1}", arr1[i], arr1[j]));
    }
}

祝你好运!

添加截图供参考...

【讨论】:

  • 虽然我认为@jim tollan 的答案看起来更好,因为他不需要额外的 if 语句,这也是愚蠢的。 :)
【解决方案2】:

好吧,我的微弱尝试:

var myArray = new[] { "A", "B", "C", "D", "E" };
var myCombos = new List<string>();
for (int i = 0; i < myArray.Length; i++)
{
    for (int j = (i + 1); j < myArray.Length; j++)
    {
        myCombos.Add(myArray[i] + myArray[j]);
    }
}

现在我们有了:

AB 交流电 广告 AE 公元前 BD 是 光盘 行政长官 德

【讨论】:

  • 似乎是迄今为止唯一正确的尝试.. :)
  • 是的,我当然不是天才——哈哈。不得不回想起过去的旧基本装腔作势。不错的脑筋急转弯
  • 不,你还没有投反对票。我可以看到每个答案的赞成/反对票,它只说 1up/0down => +1。
  • 偏执狂-谁是偏执狂:-)?!?。一定是我星期五的疯狂在继续。顺便说一句,很喜欢你整理的答案,让它感觉很。不错 - 阿巴斯周末愉快
【解决方案3】:
var arr1 = new[] { "A", "B", "C", "D", "E" };
var combinations = new List<string>();
foreach (var i in arr1) {
    foreach (var j in arr1) {
         if((int)i.ToCharArray()[0] < (int)j.ToCharArray()[0]) {
             combinations.Add(i + j);
         }
    }
}

现在组合列表包含所有组合!

【讨论】:

  • 我投了赞成票,但后来明白这是不正确的。它将产生不需要的 AB 和 BA。
  • @sjkm:但它仍然是错误的结果(20 而不是 10)。
  • 您允许ABBA 出现在结果中,而只允许AB
  • 啊我明白了,但现在应该是对的
【解决方案4】:

也许是这个小 LINQ 查询:

var allCombinations = from str1 in arr1
                      from str2 in arr1
                      where str1.CompareTo(str2) < 0
                      select str1 + str2;
Console.Write(string.Join(",", allCombinations));

我的最后一个不同,我认为这是您的结果中的一个错字:AB,AC,AD,AE,BC,BD,BE,CD,CE,DE

【讨论】:

  • 为什么不先运行呢?它显然会产生与问题中提出的结果不同的结果。
【解决方案5】:

尝试关注(LINQ 中的交叉连接)

  var arr1 = new[] { "A", "B", "C", "D", "E"};
  var result = (from i1 in arr1
             from i2 in arr1.Where( i=> i[0]>i1[0])
            select i1+i2).ToArray();

ideone here上的片段结果

AB
AC
AD
AE
BC
BD
BE
CD
CE
DE

【讨论】:

  • 您应该过滤相同的 el 对,例如“AA”
  • 太快太不准确了:)
  • 并过滤掉BA等
猜你喜欢
  • 2015-09-16
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 2018-12-13
  • 1970-01-01
相关资源
最近更新 更多