让我说我有一个10个字符串的列表(让我们称之为“str1”,“str2”,......“str10”等)。我希望能够从中生成所有对 (“str1”,“str2”) (“str1”,“str3”) 。 。 。 等等(“str9”,“str10”)。这很容易,有两个循环。如何用一百万个字符串做同样的事情?反正把它放在一个表中,然后运行查询吗?
答案 0 :(得分:4)
将它们放在表格中,并使用此连接:
Select t1.StringValue, T2.StringValue
From StringsTable T1
INNER JOIN StringsTable T2
ON T1.StringValue <> T2.StringValue
现在,如果您在某种查询分析器/ GUI中运行一个百万字符串,那么您可能会受到一些伤害 - 这会带来巨大的数据负载。
答案 1 :(得分:1)
在C#中(Java会类似.C ++只是有点不同)
for(int i = 0; i < ArrayOfString.Length-1; ++i)
for(int j = i+1; i < ArrayOfString.Length; ++j)
ListOfPairs.Add(new Pair(ArrayOfString[i], ArrayOfString[j]));
答案 2 :(得分:0)
如果你想创造所有这些对,你将获得近一万亿对 要将它们存储在某处,您需要大约20 TB的数据,基于20个字节/字符串对。
如果你想制作所有这些对,你应该考虑一种生成方法,它可以动态生成对,而不是将它们存储在某个地方。
在c#中它看起来像这样:
private IEnumerable<Tuple<string, string>> GetPairs(IEnumerable<string> strings)
{
foreach (string outer in strings)
{
foreach (string inner in strings)
{
if (outer != inner)
{
yield return Tuple.Create(outer, inner);
}
}
}
yield break;
}
电话
string[] strings = new string[] { "str1", "str2", "str3" };
foreach (var stringPairs in GetPairs(strings))
{
Console.WriteLine("({0},{1})", stringPairs.Item1, stringPairs.Item2);
}
生成预期结果(如果您关心对中项目的顺序)。
(str1,str2)
(str1,str3)
(str2,str1)
(str2,str3)
(str3,str1)
(str3,str2)
预计用1M字符串需要一段时间。
答案 3 :(得分:0)
要在表中执行此操作(我假设您的意思是SQL Server或类似的)
create table T
(
Value nvarchar(10)
)
insert into T select '1'
insert into T select '2'
insert into T select '3'
insert into T select '4'
insert into T select '5'
select
A.Value, B.Value
from T A
Cross Join T B
where A.Value<>B.Value
order by A.Value