【问题标题】:How to Find All Possible String Combinations Within 2 Different Size String Arrays如何在 2 个不同大小的字符串数组中查找所有可能的字符串组合
【发布时间】:2019-01-24 14:40:20
【问题描述】:

我遇到了一个特殊的问题,经过长时间的搜索,我找不到任何解决方案。 这是我的问题:

我有两个字符串数组:

   var arr1 = new[] { "UserId", "BookId", "BookStoreId", "Appid" };
   var arr2 = new[] {"Same", "Unique", "Repetitive"};

我想要所有可能组合的结果,例如:

结果(应为表格格式):

Columns- UserId BookId BookStoreId Appid

  • Row1 相同 相同 相同 相同
  • Row2 相同 相同 相同 唯一
  • Row3 相同相同相同重复

  • Row4 相同 相同 唯一 相同

  • Row5 相同 相同 重复 相同

  • Row6 相同 相同 唯一 唯一

  • Row6 相同相同唯一重复
  • Row7 相同相同重复唯一
  • Row8 相同相同重复重复

  • Row9 相同 唯一 相同 相同

  • Row10 相同唯一唯一相同
  • Row11 相同 重复 相同 相同 等等……

行和列仅用于表示目的。

我希望我的问题现在很清楚了。

我应该创造 64 个独特的组合。

我尝试了很多方法,包括笛卡尔积,但都没有解决我的问题。

【问题讨论】:

  • this post 怎么样?
  • 所以您想要arr2 中所有长度为 4 的项目的所有可能组合?见permutation with repetions
  • @MongZhu 这没有给出预期的输出,我希望结果为表格格式,其中 ColumnNames 作为 arr1 值,Rows 作为 Arr2 值。
  • “我应该创造 64 个独特的组合。”我不明白为什么它只会是 64。每个元素都可以是 7 个字符串中的任何一个,对吧?所以应该有 7^4=2401 个组合。您的问题目前还不是很清楚...(为什么您的第一个示例使用arr1 中的所有内容也不是很明显,但您的所有其他示例只使用arr2 中的项目。这有什么相关性?)
  • 那么实际上第一个数组与提出组合无关?还是仅仅提供了您需要的组合的长度? (如果是这样,即使显示字符串数组也不要费心-您基本上想要一个方法接受选项字符串数组,以及每行的项目数。)

标签: c# arrays string combinations permutation


【解决方案1】:

看来你需要一个与重复的组合。 检查这个答案https://stackoverflow.com/a/25824818/1007620

总结:

static IEnumerable<String> CombinationsWithRepition(IEnumerable<string> input, int length)
{
    if (length <= 0)
        yield return "";
    else
    {
        foreach(var i in input)
            foreach(var c in CombinationsWithRepition(input, length-1))
                yield return i + ',' + c;
    }
}

然后

string[] items = {"UserId", "BookId", "BookStoreId", "Appid", "Same", "Unique", "Repetitive"};
foreach (var c in CombinationsWithRepition(items, 4))
    Console.WriteLine (c);

结果https://pastebin.com/2hCbA1XJ

【讨论】:

  • 不是我所期望的,考虑 arr1 元素作为列名和 arr2 元素作为它们的值,保持列名静态,我们需要动态交换值以获取所有可能的重复组合的唯一组合。将结果集视为一个表格(它可能不会像那样可见),请参阅我编辑的问题
  • 然后使用相同的代码并从项目中删除arr1元素,您将获得3^4 ​​= 81个组合
  • @KienChu 谢谢,它运作良好,我似乎对 arr1 想多了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 2018-04-09
  • 2017-11-27
  • 2018-08-18
相关资源
最近更新 更多