小编Bra*_*ess的帖子

LINQ中的"RemoveAll"如何比迭代快得多?

以下代码:

List<Interval> intervals = new List<Interval>();
List<int> points = new List<int>();

//Initialization of the two lists
// [...]

foreach (var point in points)
{
    intervals.RemoveAll (x => x.Intersects (point));
}
Run Code Online (Sandbox Code Playgroud)

当列表大小为10000时,至少比这快100倍:

List<Interval> intervals = new List<Interval>();
List<int> points = new List<int>();

//Initialization of the two lists
// [...]

foreach (var point in points)
{
    for (int i = 0; i < intervals.Count;)
    {
        if (intervals[i].Intersects(point))
        {
            intervals.Remove(intervals[i]);
        }
        else
        {
            i++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这怎么可能?使用"RemoveAll"在引擎盖下执行什么操作?根据MSDN,"RemoveAll"执行线性搜索,因此在O(n)中.所以我期望两者都有类似的表现.

当用"RemoveAt"替换"Remove"时,迭代速度要快得多,与"RemoveAll"相当.但是,这两个 "删除"和"RemoveAt移除"有O(n)的复杂性,那么为什么它们之间的性能差别这么大?难道只是因为"删除(项目)"将列表元素与"项目"进行比较,"RemoveAt"不执行任何比较?

c# linq performance

17
推荐指数
2
解决办法
3736
查看次数

如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

输入是正整数或空整数的数组A和另一整数K.

我们应该将A分成K个连续元素块(通过"分区",我的意思是A的每个元素都属于某个块,而2个不同的块不包含任何共同的元素).

我们将块的总和定义为块的元素的总和.

目标是在K个块中找到这样的分区,使得每个块的最大值(让我们称之为" MaxSumBlock ")最小化.

我们需要输出MaxSumBlock(我们不需要找到实际的分区)

这是一个例子:

输入:

A = {2, 1, 5, 1, 2, 2, 2}
K = 3
Run Code Online (Sandbox Code Playgroud)

预期产量:

MaxSumBlock: 6
(with partition: {2, 1}, {5, 1}, {2, 2, 2})
Run Code Online (Sandbox Code Playgroud)

在预期输出中,每个块的总和为3,6和6.最大值为6.

这是一个非最佳分区:

partition: {2, 1}, {5}, {1, 2, 2, 2}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每个块的总和是3,6和7.因此最大值是7.这不是正确的答案.

什么算法解决了这个问题?

编辑:K和A的大小不大于100'000.A的每个元素不大于10'000

language-agnostic algorithm partitioning

6
推荐指数
1
解决办法
3044
查看次数

Windows MSI:错误1316:指定的帐户已经存在

从捆绑软件执行wix软件包会在升级过程中输出“错误1316:指定的帐户已存在”。Windows Installer如何输出此错误代码?恐怕没有太多的文档。

我们以前发布了一个包含单个msi软件包的产品,现在我们正在准备一个升级,其中包括一个包含该msi软件包新版本的wix捆绑软件。原始msi软件包与更新之间的产品代码和文件名未更改。

编辑: MSI程序包目前不支持升级。当用户需要升级时(无论是主要升级,次要升级还是小更新),他必须首先手动卸载以前的软件包...

编辑2:我刚刚删除了对util扩展的引用进行编译,并且安装程序似乎运行正常……尽管如此,我仍然需要对其进行全面测试。

windows-installer bundle wix upgrade

5
推荐指数
2
解决办法
4万
查看次数

Wix - 根据条件安装目录

在我的 wix 源代码中,我必须在注册表中查找 2 个条目才能获取安装目录:

<Property Id="INSTALLDIR_A"> 
 <RegistrySearch Id='RegA' Type='raw' 
   Root='HKLM' Key='Software\Path\To\A' Name='InstallLocation' /> 
Run Code Online (Sandbox Code Playgroud)

 <Property Id="INSTALLDIR_B"> 
 <RegistrySearch Id='RegB' Type='raw' 
   Root='HKLM' Key='Software\Path\To\B' Name='InstallLocation' /> 
Run Code Online (Sandbox Code Playgroud)

我的安装目录必须是 INSTALLDIR_A 或 INSTALLDIR_B。如果我只需要查看 1 个条目,我会这样实现:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="INSTALLDIR" Name="My path">
    <!-- further code -->
  </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

但我希望 INSTALLDIR 为 INSTALLDIR_A 或 INSTALLDIR_B,具体取决于定义的是哪一个。如何实现这一目标?

directory registry wix

4
推荐指数
1
解决办法
2243
查看次数

在熊猫数据框中使用正则表达式匹配组的性能

我有一个 ~350k 行的 pandas 系列,我想使用由 ~100 个子字符串组成的正则表达式来应用pandas.Series.str.extract函数,例如:

'(item0|item1|item2|item3|item4|item5|item6|item7|item8|item9|item10|item11|item12|item13|item14|item15|item16|item17|item18|item19|item20|item21|item22|item23|item24|item25|item26|item27|item28|item29|item30|item31|item32|item33|item34|item35|item36|item37|item38|item39|item40|item41|item42|item43|item44|item45|item46|item47|item48|item49|item50|item51|item52|item53|item54|item55|item56|item57|item58|item59|item60|item61|item62|item63|item64|item65|item66|item67|item68|item69|item70|item71|item72|item73|item74|item75|item76|item77|item78|item79|item80|item81|item82|item83|item84|item85|item86|item87|item88|item89|item90|item91|item92|item93|item94|item95|item96|item97|item98|item99|item100)'

提取速度太慢:在我的 jupyter notebook (Python 3.9) 中需要 1 分钟。为什么这么慢,如何加快速度?

编辑 1我以“itemX”为例,但它可以被任何子字符串替换。正则表达式可能类似于

'(carrageenan|dihydro|basketball|etc...)'
Run Code Online (Sandbox Code Playgroud)

编辑 2对一些评论的回答:

  • 我正在寻找完全匹配
  • 我已经使用预编译正则表达式 re.compile()

python regex performance pandas

2
推荐指数
1
解决办法
69
查看次数

无限循环中的内存泄漏

如果您运行的程序不断产生内存泄漏,您的计算机有什么损害?

例如:

while(true)
{
    char* c = malloc(sizeof(char));
    c = NULL;
}
Run Code Online (Sandbox Code Playgroud)

然后让代码执行数小时或数天?

c memory-leaks infinite-loop

0
推荐指数
1
解决办法
866
查看次数

“在进行托管安装时,可以将 msi 属性传递给服务器端”是什么意思?

什么是托管安装?“msi 正在服务器端运行”是什么意思?“可以将 msi 属性传递给服务器端”是什么意思?

这个问题来自“Property”元素“Secure”属性的wix文档:

Denotes that the Property can be passed to the server side when doing a managed installation with elevated privileges. See the SecureCustomProperties Property for more information.
Run Code Online (Sandbox Code Playgroud)

windows-installer wix server-side

0
推荐指数
1
解决办法
614
查看次数

C#.net窗口窗体对话框下一个/上一个按钮

在C#.net窗体应用程序中,我有一个带有"next"和"previous"按钮的对话窗口,我想根据用户按下的按钮"移动到下一页或上一页".

怎么做到这一点?

.net c# dialog winforms

-1
推荐指数
1
解决办法
6595
查看次数