Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 从庞大的对象列表(比如一百万个字符串)中创建两对对象的最佳方法是什么?_Database_Algorithm - Fatal编程技术网

Database 从庞大的对象列表(比如一百万个字符串)中创建两对对象的最佳方法是什么?

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

假设我有一个包含10个字符串的列表,就称它为str1,str2。。。str10等。我希望能够从中生成所有对 str1,str2 str1,str3 . . .
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意味着您可以说一种解决方案比另一种更好。你有什么标准?