Database 从庞大的对象列表(比如一百万个字符串)中创建两对对象的最佳方法是什么?
假设我有一个包含10个字符串的列表,就称它为str1,str2。。。str10等。我希望能够从中生成所有对 str1,str2 str1,str3 . . .Database 从庞大的对象列表(比如一百万个字符串)中创建两对对象的最佳方法是什么?,database,algorithm,Database,Algorithm,假设我有一个包含10个字符串的列表,就称它为str1,str2。。。str10等。我希望能够从中生成所有对 str1,str2 str1,str3 . . . etc高达str9、str10。这很简单,有两个循环。如何用一百万个字符串做同样的事情?是否仍要将其放入表中并运行查询?将它们放入表中,并使用此联接: Select t1.StringValue, T2.StringValue From StringsTable T1 INNER JOIN StringsTable T2
etc高达str9、str10。这很简单,有两个循环。如何用一百万个字符串做同样的事情?是否仍要将其放入表中并运行查询?将它们放入表中,并使用此联接:
Select t1.StringValue, T2.StringValue
From StringsTable T1
INNER JOIN StringsTable T2
ON T1.StringValue <> T2.StringValue
现在,如果您在某种查询分析器/GUI中运行一百万个字符串,那么您正在为自己设置一些伤害-返回的数据量很大。将它们放在一个表中,并使用此连接:
Select t1.StringValue, T2.StringValue
From StringsTable T1
INNER JOIN StringsTable T2
ON T1.StringValue <> T2.StringValue
现在,如果您在某种查询分析器/GUI中运行一百万个字符串,那么您正在为自己设置一些伤害-这是一个巨大的返回数据负载。在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]));
在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]));
如果你想创建所有这些对,你将得到将近一万亿对。 要将它们存储在某个位置,您需要大约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;
}
如果您关心项目对中项目的顺序,则生成预期结果
(str1,str2)
(str1,str3)
(str2,str1)
(str2,str3)
(str3,str1)
(str3,str2)
使用1M字符串可能需要一段时间。如果您想创建所有这些对,您将获得近1万亿对。 要将它们存储在某个位置,您需要大约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;
}
如果您关心项目对中项目的顺序,则生成预期结果
(str1,str2)
(str1,str3)
(str2,str1)
(str2,str3)
(str3,str1)
(str3,str2)
使用1M字符串可能需要一段时间。要在表中执行此操作,我想您指的是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
要在表中执行此操作,我假定您指的是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
OP想知道如何放入表格并运行查询。如果你能在你的计算机上用1M字符串运行该代码,我想买你的计算机。OP想知道如何放入表格并运行查询。如果你能在你的计算机上用1M字符串运行该代码,我想买你的计算机。如果返回:如果返回returned:best意味着您可以说一种解决方案比另一种更好。您有哪些标准?best意味着您可以说一种解决方案比另一种更好。你有什么标准?