问题列表 - 第7740页

C# - 需要改进一段代码的建议

我有一个函数接收三个不同的"人"对象,并根据"people"对象中的组合值生成一个新的"兼容性"对象.

然而,作为输入接收的三个"人"对象的大约1/3的时间与之前的一个相同,尽管可能以不同的顺序.在这些情况下,我不想创建一个新的"得分"对象,而只是返回现有对象中包含的值.

最初,程序只循环遍历"兼容性"对象列表<>,搜索属于这三个"人"的对象(因为每个"兼容性"对象包含一个人对象数组).考虑到有超过数千个"兼容性"对象和超过一百万"人"对象,这种方法非常慢.

我想到了使用字典,其中键是我通过使用XOR将三个人对象的id值组合成单个UInt64而生成的数字,并将得分对象存储为字典值而不是列表.这将时间减少了大约一半,并且在时间性能方面是可以接受的,但是碰撞太多了,并且它经常返回错误的分数.

任何建议或指示将不胜感激.

编辑:要添加到原始问题,每个"人"对象都有一堆我可以使用的其他字段,但问题是制作一个UNIQUE和COMMUTATIVE键.

c# performance dictionary list

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

何时以及为何使用 CoLoadLibrary?

CoLoadLibrary() 的描述表明它的功能与 LoadLibraryEx() 几乎相同 - 将 DLL 加载到进程中。COM 类创建函数 - CoCreateInstance() 和 CoGetClassObject() - 都将必要的 DLL 加载到进程中。

那么为什么首先需要 CoLoadLibrary() 以及应该如何使用它呢?

windows com interop com-interop

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

作为哈希的Skein的安全性是否意味着Threefish作为分组密码的安全性?

针对SHA-3提出的Skein哈希有一些令人印象深刻的速度结果,我怀疑它将适用于其核心的三鱼块密码 - 但是,如果Skein被批准用于SHA-3,这是否意味着三鱼被认为是安全的?也就是说,Threefish中的任何漏洞是否意味着SHA-3中存在漏洞?(因此,缺乏已知问题和对SHA-3的普遍信任对三鱼来说意味着相同)

theory cryptography skein sha-3

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

在Haskell中定义函数的2个或更多个方程可以共享相同的where/let块吗?

在Haskell中定义函数的2个或更多个方程可以共享相同的where/let块吗?

让我提出一个人为的例子来说明这个问题.

首先,请考虑以下代码作为起点:

someFunction v1 v2 v3 = difference ^ v3
   where
      difference = v1 - v2
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,想象一下,我需要处理一个"替代案例",如果v3 == 99并且差异<4(完全随意,但我要说那些是我的要求),我需要返回零.

我的第一个想法是这样做:

someFunction v1 v2 99 | difference < 4 = 0
someFunction v1 v2 v3 = difference ^ v3
   where
      difference = v1 - v2
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为someFunction的第一个等式和someFunction的第二个等式不是在块中共享相同的.这在这个人为的例子中并不是什么大不了的事,因为where块中只有一个变量("差异").但在现实世界中,可能存在大量变量,重复这些变量是不可接受的.

我已经知道如何通过使用警卫和只有一个方程来解决这个问题.问题是,有多种方程可以共享相同的where/let子句吗?因为似乎需要具有不同模式的多个方程而不是被迫只有一个具有许多防护的方程.

haskell functional-programming pattern-matching

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

如何访问列表中的列表项

我正在尝试在gridview中显示ListItems.

请帮我找到一种方法来访问列表项.

using (SPSite site = new SPSite("http://mysitehere......"))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists["TestList"];
        .......
        .......
    }
}
Run Code Online (Sandbox Code Playgroud)

请帮助我访问列表项值.

sharepoint

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

如何使用 WinNT 协议从 Active Directory 获取用户 GUID?

我正在尝试从 Active Directory 获取用户 GUID。我的代码:

DirectoryEntry entry = new DirectoryEntry("WinNT://DOMAIN/UserName");
Console.WriteLine("The GUID of the ADS object:" + entry.Guid);
Console.WriteLine("The Native GUID of the ADS object:" + entry.NativeGuid);
Run Code Online (Sandbox Code Playgroud)

无论用户和域如何,上面的代码始终返回 d83f1060-1e71-11cf-b1f3-02608c9e7553。

是否可以使用 WinNT 协议获取用户 GUID?

active-directory

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

关于无向图的KSPA建议

有一个KSPA的自定义实现需要重写.当前实现使用修改的Dijkstra算法,其伪代码在下面粗略地解释.它通常被称为KSPA使用边缘删除策略我认为如此.(我是图论的新手).

Step:-1.  Calculate the shortest path between any given pair of nodes using the Dijkstra algorithm. k = 0 here.
Step:-2.   Set k = 1
Step:-3.   Extract all the edges from all the ‘k-1’ shortest path trees. Add the same to a linked list Edge_List.
Step:-4.  Create a combination of ‘k’ edges from Edge_List to be deleted at once such that each edge belongs to a different SPT (Shortest Path Tree). This can be done by inspecting the ‘k’ value …
Run Code Online (Sandbox Code Playgroud)

algorithm graph-theory shortest-path

5
推荐指数
1
解决办法
777
查看次数

如何链接到GCC中的特定版本的共享库

我正在编译一些在Debian Linux系统上使用libcurl的代码.我的开发机器正在运行Debian 5,但我希望二进制文件也可用于较旧的Debian 4系统.

我发现如果我指定-lcurl它将链接到libcurl.so.4但Debian 4系统只有libcurl.so.3

有什么方法我可以告诉GCC链接到libcurl.so.3(它存在于Debian 4和5中)或者只是libcurl.so所以它将使用任何可用的版本?

linux linker debian gcc

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

在Haskell函数定义中应用DRY的指南

我有一个问题,关于在Haskell中应用DRY原则的特定方式是否被认为是一种好的做法.我将提供一个例子,然后询问我所采用的方法是否被认为是好的Haskell风格.简而言之,问题是这样的:当你有一个很长的公式,然后你发现自己需要在其他地方重复该公式的一些小子集时,你是否总是将公式的重复子集放入一个变量中,这样你就可以保持DRY ?为什么或者为什么不?

示例: 想象一下,我们正在取一串数字,并将该字符串转换为其对应的Int值.(顺便说一下,这是来自"真实世界Haskell"的练习).

这是一个有效的解决方案,除了忽略边缘情况:

asInt_fold string = fst (foldr helper (0,0) string)
  where
    helper char (sum,place) = (newValue, newPlace)
      where 
        newValue = (10 ^ place) * (digitToInt char) + sum
        newPlace = place + 1
Run Code Online (Sandbox Code Playgroud)

它使用foldr,累加器是下一个值的元组和到目前为止的总和.

到现在为止还挺好.现在,当我去实现边缘案例检查时,我发现在不同的地方我需要"newValue"公式的一小部分来检查错误.例如,在我的机器上,如果输入大于(2 ^ 31 - 1),则会出现Int溢出,因此我可以处理的最大值是2,147,483,647.因此,我进行了2次检查:

  1. 如果位置值9(数十亿位)和数字值> 2,则出现错误.
  2. 如果sum +(10 ^ place)*(digitToInt char)> maxInt,则出现错误.

那两个检查让我重复了部分公式,所以我介绍了以下新变量:

  • digitValue = digitToInt char
  • newPlaceComponent =(10 ^ place)*digitValue

我引入这些变量的原因仅仅是DRY原理的自动应用:我发现自己重复了公式的那些部分,所以我只定义了一次.

但是,我想知道这是否被认为是好的Haskell风格.有明显的优点,但我也看到了缺点.它肯定会使代码更长,而我见过的大部分Haskell代码都非常简洁.

那么,你认为这个好的Haskell风格,你是否遵循这种做法?为什么/为什么不呢?

而对于它的价值,这是我的最终解决方案,它处理了许多边缘情况,因此具有相当大的where块.由于我应用DRY原理,您可以看到块的大小.

谢谢.

asInt_fold "" = error "You can't be giving me an empty string now"
asInt_fold …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming dry

3
推荐指数
1
解决办法
794
查看次数

MS nmake相当于$(MAKECMDGOALS)

我正在使用(有点过时的)微软版本的nmake,它通常与visual studio 6.0一起打包.(如果有更新的nmake的相关答案 - 请告诉我,我可能会考虑升级).

我希望改变现有的makefile,这样如果它与nmake dpndfull目标一起运行它就不会包含依赖列表,这应该构建依赖列表.

使用GNU make我会测试是否dpndfull存在MAKECMDGOALS,如果存在,我将不会包含(可能不存在)依赖列表.

有关如何使用nmake找到当前制作目标的任何想法?

nmake makefile visual-studio

5
推荐指数
1
解决办法
863
查看次数