小编Dir*_*mar的帖子

查找具有相同数量的1和0的最大子序列二进制集

我在互联网上发现了以下问题,并想知道我将如何解决它:

你得到一个包含0和1的数组.找到O(n)时间和O(1)空间算法以找到具有相等数量的1和0的最大子序列.

例子:

  1. 10101010 - 满足问题的最长子序列是输入本身
  2. 1101000 - 满足该问题的最长子序列是110100

c language-agnostic algorithm

21
推荐指数
4
解决办法
5872
查看次数

删除批处理文件中目录树的最快方法

我需要编写一个批处理文件,该文件接收到包含大量空子目录的目录并将其全部删除.

这样做的最快方法是什么?(快速我的意思是不喜欢Windows资源管理器在您尝试删除此类目录时所执行的操作...)

澄清:

我不是要删除只有空目录.事实上,我试图删除的这个目录大多是空的子目录.

windows file-io batch-file

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

在VBA中获取时区信息(Excel)

我想确定VBA中特定日期不同国家/地区的GMT/UTC(包括夏令时)的时间偏差.有任何想法吗?

编辑(来自自我回答):

谢谢0xA3.我快速阅读链接页面.我假设您只能获得运行Windows的本地的GMT偏移量:

ConvertLocalToGMT    
DaylightTime  
GetLocalTimeFromGMT          
LocalOffsetFromGMT
SystemTimeToVBTime
LocalOffsetFromGMT
Run Code Online (Sandbox Code Playgroud)

在Java中,您可以执行以下操作:

TimeZone bucharestTimeZone = TimeZone.getTimeZone("Europe/Bucharest");
    bucharestTimeZone.getOffset(new Date().getTime());

Calendar nowInBucharest = Calendar.getInstance(TimeZone.getTimeZone("Europe/Bucharest"));
    nowInBucharest.setTime(new Date());
    System.out.println("Bucharest: " + nowInBucharest.get(Calendar.HOUR) + ":" + nowInBucharest.get(Calendar.MINUTE));
Run Code Online (Sandbox Code Playgroud)

这意味着我可以获得不同国家(时区)的偏移量,因此我也可以得到布加勒斯特的实际时间.我可以在VBA中这样做吗?

excel timezone vba excel-vba dst

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

程序太大

我收到此错误消息 - Procedure too large- 在VBA中.这个错误的原因和出路是什么?

error-handling vba ms-office

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

实体框架核心数量没有最佳性能

我需要通过某个过滤器获取记录数量.

从理论上讲这条指令:

_dbContext.People.Count (w => w.Type == 1);
Run Code Online (Sandbox Code Playgroud)

它应该生成SQL,如:

Select count (*)
from People
Where Type = 1
Run Code Online (Sandbox Code Playgroud)

但是,生成的SQL是:

Select Id, Name, Type, DateCreated, DateLastUpdate, Address
from People
Where Type = 1
Run Code Online (Sandbox Code Playgroud)

生成的查询在具有许多记录的数据库中运行需要更长的时间.

我需要生成第一个查询.

如果我这样做:

_dbContext.People.Count ();
Run Code Online (Sandbox Code Playgroud)

实体框架生成以下查询:

Select count (*)
from People
Run Code Online (Sandbox Code Playgroud)

..运行得非常快.

如何生成第二个查询将搜索条件传递给计数?

c# linq sql-server entity-framework-core

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

WiX:如何防止在卸载时删除注册表值?

我想声明安装后存在某个注册表值,所以我添加了以下组件:

<Component Id="RegistryEntryContextMenuOdt" Guid="4BA5BA24-4F65-4BDF-99EB-CB4B947F31A9" DiskId="1" KeyPath="yes">
    <RegistryKey Id="RegKeyOdt" Root="HKCR" Action="create" Key=".odt">
      <RegistryValue Type="string" Value="openDocument.WriterDocument.1" />
    </RegistryKey>
</Component>
Run Code Online (Sandbox Code Playgroud)

在安装之前可能已经设置了键/值.但是,我希望将值设置为我的特定值,即它将被我的值覆盖.

我现在的问题是,卸载我的产品时总会删除此值.但是,如果我的安装程序添加了值,我只希望删除该值.如果我的安装程序刚刚修改了该值,则应恢复之前的值(或者,如果不可能,则我的值应保持不变).

请注意,卸载时不会删除密钥本身.这似乎工作正常,因为我Action="create"RegistryKey元素上指定.

是否有类似的设置RegistryValue可以创建值,但不能在安装时删除它?

更新:HKCR下的两个注册表项都是机器范围的settinge,即它们来自注册表的HKLM\SOFTWARE\Classes分支.

registry wix uninstall

15
推荐指数
1
解决办法
7671
查看次数

XSL模板可以匹配*ALL*模式吗?

有没有办法编写一个在所有模式下匹配的XSL 1.0模板?

或者我是否必须为每个现有模式编写单独的模板(包括将来添加的模式的其他模板)?

这是我有的:

<xsl:apply-templates mode="mode1" />
    ...
<xsl:apply-templates mode="mode2" />
    ...
<!-- Do not process text content of nodes no matter in what mode -->
<!-- Is there a way to have only one template here? -->
<xsl:template match="text()" mode="mode1" />
<xsl:template match="text()" mode="mode2" />
Run Code Online (Sandbox Code Playgroud)

xslt

14
推荐指数
1
解决办法
1万
查看次数

WPF:如何防止控件窃取关键手势?

在我的WPF应用程序中,我想将一个输入手势附加到命令,以便输入手势在主窗口中全局可用,无论哪个控件具有焦点.

在我的情况下,我想绑定Key.PageDown到一个命令,但是,只要某些控件接收焦点(例如TextBox或TreeView控件),这些控件就会接收键事件并且不再触发命令.这些控件没有特定CommandBindingsInputBindings定义.

这是我定义输入手势的方式:

XAML:

<Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" >
    <StackPanel>
        <TreeView>
            <TreeViewItem Header="1">
                <TreeViewItem Header="1.1"></TreeViewItem>
                <TreeViewItem Header="1.2"></TreeViewItem>
            </TreeViewItem>
            <TreeViewItem Header="2" ></TreeViewItem>
        </TreeView>
        <TextBox />
        <Label Name="label1" />
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

码:

using System;
using System.Windows;
using System.Windows.Input;

public static class Commands
{
    private static RoutedUICommand _myCommand;

    static Commands()
    {
        _myCommand = new RoutedUICommand("My Command",
            "My Command",
            typeof(Commands),
            new InputGestureCollection()
                {
                    new KeyGesture(Key.PageDown, ModifierKeys.None)
                });
    }

    public static ICommand MyCommand
    {
        get { …
Run Code Online (Sandbox Code Playgroud)

c# wpf events event-handling

14
推荐指数
2
解决办法
5550
查看次数

我如何使用XSLT重复X次动作

我要用XSLT填充总共20个元素.在我的XML代码中,我有一个<select>带有值的,无论如何都要不写20个表单?

我的XML:

<output>
    <select>
        <id>1</id>
        <name>One</name>
    </select>
    <select>
        <id>2</id>
        <name>Two</name>
    </select>
    <select>
        <id>3</id>
        <name>Three</name>
    </select>
    <!-- An more -->
</output>
Run Code Online (Sandbox Code Playgroud)

我的XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">   
    <xsl:template match="/">
        <html>

            <body>
        <select name="values[]">
            <option value="0"> </option>
            <xsl:for-each select="output/select">
                <option>
                    <xsl:attribute name="value"><xsl:value-of select="id"></xsl:attribute>
                    <xsl:value-of select="name" />
                </option>
            </xsl:for-each>
        </select>
            </body>

        </html>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

期望的输出:

<html>
    <body>

        <select name="values[]">
            <option value="0"> </option>
            <option value="1">One</option>
            <option value="2">Two</option>
            <option value="3">Three</option>
        </select>
        <!-- But 20 times -->   

    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

xml forms xslt

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

用于比较XML节点的高效算法

我想确定XML文档中的两个不同的子节点是否相等.如果两个节点具有相同的属性集和子注释,并且所有子注释也相等(即整个子树应该相等),则应认为它们是相等的.

输入文档可能非常大(最多60MB,超过100000个节点需要比较)并且性能是个问题.

检查两个节点是否相等的有效方法是什么?

例:

<w:p>
  <w:pPr>
    <w:spacing w:after="120"/>
  </w:pPr>
  <w:r>
    <w:t>Hello</w:t>
  </w:r>
</w:p>
<w:p>
  <w:pPr>
    <w:spacing w:after="240"/>
  </w:pPr>
  <w:r>
    <w:t>World</w:t>
  </w:r>
</w:p>
Run Code Online (Sandbox Code Playgroud)

此XML片段描述了OpenXML文档中的段落.该算法将用于确定文档是否包含具有与文档前面的另一段相同属性(w:pPr节点)的段落(w:p节点).

我的一个想法是将节点的外部XML存储在一个哈希集中(通常我必须首先得到规范的字符串表示,其中属性和子注释总是以相同的方式排序,但我可以期望我的节点已经到是这样一种形式).

另一个想法是为每个节点创建一个XmlNode对象,并编写一个比较所有属性和子节点的比较器.

我的环境是C#(.Net 2.0); 我们非常欢迎任何反馈和进一步的想法.也许有人甚至已经有了一个很好的解决方案?

编辑:微软的XmlDiff API实际上可以这样做,但我想知道是否会有一个更轻量级的方法.XmlDiff似乎总是产生一个diffgram,并且总是先生成一个规范的节点表示,这两件事我都不需要.

EDIT2:我最终根据这里提出的建议实现了我自己的XmlNodeEqualityComparer.非常感谢!!!!

谢谢,divo

c# xml algorithm comparison performance

13
推荐指数
1
解决办法
1万
查看次数