【发布时间】:2019-08-22 10:39:43
【问题描述】:
我正在制作一个在 union 下关闭的字符串数组列表,这意味着任何两个数组的 union 都必须在完整列表中。
为此,我编写了自己的代码,该代码遍历字符串数组列表并添加新字符串数组,这些新字符串数组是列表中两个现有字符串数组的并集,仅当新数组不存在于列表。
public static List<string[]> UnionClosed(List<string[]> kstructure)
{
for (int i = 1; i < kstructure.Count; i++)
{
for (int j = i + 1; j < kstructure.Count; j++)
{
string[] kstate1 = kstructure[i];
string[] kstate2 = kstructure[j];
string[] unionStatesResult = kstate1.Union(kstate2).ToArray();
int flag = 0;
for (int k = 1; k < kstructure.Count; k++)
{
if (kstructure[k].Length == unionStatesResult.Length && kstructure[k].Intersect(unionStatesResult).Count()==kstructure[k].Length)
{
flag = flag + 1;
break;
}
}
if (flag==0)
{
kstructure.Add(unionStatesResult);
}
}
}
return (kstructure);
}
预期的结果是得到一个在union下闭合的字符串数组列表。
例如,如果我传递输入:{{}, {"i1"}, {"i2"}, {"i3"}, {"i4"}, {"i1","i2"}, { “i1”、“i3”}、{“i1”、“i4”}、{“i1”、“i5”}、{“i2”、“i3”}、{“i2”、“i4”}、{ “i2”、“i5”}、{“i1”、“i2”、“i3”}、{“i1”、“i2”、“i4”}、{“i1”、“i2”、“i5”} , {"i1", "i3", "i4"}, {"i1", "i3", "i5"}, {"i2", "i3","i4"}, {"i2","i3 ","i5"},{"i1", "i2", "i3", "i4"}, {"i1", "i2", "i3", "i5"}, {"i1", "i3 "、"i4"、"i5"}、{"i1"、"i2"、"i3"、"i4"、"i5"}}。
那么预期的输出应该是:{{}, {"i1"}, {"i2"}, {"i3"}, {"i4"},{"i1","i2"}, {" i1", "i3"}, {"i1", "i4"}, {"i1", "i5"},{"i2", "i3"}, {"i2","i4"}, {" i2”、“i5”}、{“i3”、“i4”}、{“i1”、“i2”、“i3”}、{“i1”、“i2”、“i4”}、{“i1” ,“i2”,“i5”},{“i1”,“i3”,“i4”},{“i1”,“i3”,“i5”},{“i1”,“i4”,“i5” },{“i2”,“i3”,“i4”},{“i2”,“i3”,“i5”},{“i2”,“i4”,“i5”},{“i1”,“ i2"、"i3"、"i4"}、{"i1"、"i2"、"i3"、"i5"}、{"i1"、"i2"、"i4"、"i5"}、{" i1”、“i3”、“i4”、“i5”}、{“i2”、“i3”、“i4”、“i5”}、{“i1”、“i2”、“i3”、“i4” ,"i5"}}。
我得到了输出,但问题是它非常慢,而且它没有为大量字符串数组提供结果。我想在联合下关闭一个大小为 500 的列表,但这段代码没有为我提供结果。我想知道是否有任何 c# 功能可以做同样的事情。其中,R sets 包在 binary_closure() 下提供了相同的功能。我想在 c# 中做同样的事情。
【问题讨论】:
-
如果您能提供minimal reproducible example,那就太好了。请务必包含示例输入以及基于这些示例输入的预期结果。
-
NuGet, tagged statistics 中的任何软件包有帮助吗?
-
我尝试了那个联合方法。问题是一样的,大数据的代码很慢。我正在寻找一种可以使我的列表在联合下关闭的功能。在 R 中,有一个包“sets”提供了名为 binary_closure 的相同功能,速度非常快。我想要 c# 中的相同功能。我搜索了很多,但没有运气。
-
@Hans k esting ,我在 NuGet 包中找不到任何功能,请您给我任何提示,告诉我哪个包可以提供我正在寻找的相同功能。
-
@Mahakgarg 请将示例输入和输出添加到您的问题中。