当给定一组静态对象(在某种意义上是静态的,一旦加载它很少会发生变化),需要重复的并发查找以及最佳性能,哪个更好,一个HashMap或一个二进制搜索使用一些自定义比较器的数组?
答案是对象或结构类型的函数吗?哈希和/或平等功能表现?哈希的独特性?清单大小? Hashset尺寸/尺寸?
我正在看的集合的大小可以是500k到10m之间的任何地方 - 这些信息很有用.
虽然我正在寻找一个C#答案,但我认为真正的数学答案不在于语言,所以我不包括那个标签.但是,如果需要注意C#特定的事情,那么需要该信息.
如果我们必须存储公司的可用职位(即经理,团队负责人等).存储它的最佳做法是什么?我有两个评论意见......"当然,欢迎你的"
在我看来,如果我有更改项目,我会选择第一个解决方案.因此,我不会将这些选项硬编码为Enum.
如果我毫不怀疑数据不会改变(例如,性别:男性,女性),我可以选择Enum解决方案.
注意:我用英语编码,UI文化可能是阿拉伯语.如果我将使用Enum解决方案,我将在表示层中对基于文化的字符串进行硬编码,从最佳实践角度来看是否可以!
我想知道你的意见,如果我的想法符合最推荐的"最佳实践"?
我有一个Perl脚本,它计算文本文件中各种字符串的出现次数.我希望能够检查某个字符串是否还不是散列中的键.是否有更好的方法完成这项工作?
这是我在做的事情:
foreach $line (@lines){
if(($line =~ m|my regex|) )
{
$string = $1;
if ($string is not a key in %strings) # "strings" is an associative array
{
$strings{$string} = 1;
}
else
{
$n = ($strings{$string});
$strings{$string} = $n +1;
}
}
}
Run Code Online (Sandbox Code Playgroud) 一个伟大的编程资源,Bit Twiddling Hacks,提出(这里)以下方法来计算32位整数的log2:
#define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n
static const char LogTable256[256] =
{
-1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
LT(4), LT(5), LT(5), LT(6), LT(6), LT(6), LT(6),
LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7)
};
unsigned int v; // 32-bit word to find the log of
unsigned r; // r will be lg(v)
register …Run Code Online (Sandbox Code Playgroud) 我刚刚学习DDD(Eric Evans的书在我面前开放),我遇到了一个我无法找到答案的问题.当您只是想获得一个简单的查找记录列表时,您在DDD中做了什么?
防爆.
EmployeeID:123
EmployeeName:John Doe
State:Alaska(下拉列表)
县:Wasilla(下拉 - 将根据州进行过滤).
例如,假设您有一个Employee域对象,一个IEmployeeRepository接口和一个EmployeeRepository类.UI将使用它来显示员工列表和个人详细信息.在UI中,您希望使用员工所在州和郡的下拉列表.将根据选择的状态筛选可用县.
不幸的是,数据库表和UI看起来非常不同.在tblEmployees中,它包含州代码= AK和县代码= 02130,而不是州和县名称.
旧的方式(在我开始此DDD任务之前)将非常简单,只需创建2个查询并使用DataReader填充下拉列表.下拉列表中显示的下方是值,它会自动用于表单帖子.
但是,对于DDD,我不确定你应该怎么做.我首先开始创建State和County对象以及存储库的存储库和接口.但是,编写4个类+2个接口以及hbm.xml文件和Employee Business对象中的管道对于2个下拉列表的2个查询来说似乎有些过分.必须有更好的方法,不是吗?我不会很快改变州或县表中的记录,即使我这样做,也不会通过这个应用程序.因此,如果我不需要,我真的不想为State和County创建业务对象.
我看到的最简单的解决方案是使用返回字典的方法创建一个辅助类,例如GetStatesAll(),GetState()和GetCounties()以及GetCounty(),但从DDD的角度来看,这感觉不对.
请帮忙.如何在没有过度设计的情况下使用DDD只需几个简单的查找?
最终解决方案 我认为我终于通过经验找到了答案,即将GetStates()方法放入自己的Data Access类中,尽管不是存储库类.由于我只进行只读访问,因此我将其放入结构DTO中.由于数据库很小,我把它们完全扔进了一个类,就像下面描述的Todd一样.
我的结论:
我需要一种能够插入条目的数据类型,然后能够快速确定是否已插入条目.A Dictionary似乎适合这种需要(见例).但是,我对字典没用values.我还应该使用字典还是有其他更适合的数据类型?
public class Foo
{
private Dictionary<string, bool> Entities;
...
public void AddEntity(string bar)
{
if (!Entities.ContainsKey(bar))
{
// bool value true here has no use and is just a placeholder
Entities.Add(bar, true);
}
}
public string[] GetEntities()
{
return Entities.Keys.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud) 如何从通过.ToLookup()方法创建的Lookup <>获取密钥集合?
我有一个查找,它将int值映射到自定义类的实例组.我需要查找包含的所有int键的集合.有什么方法可以做到这一点,还是我必须单独收集和保存它们?
我有一个移动大量数据的视频处理应用程序。
为了加快处理速度,我制作了一个查询表,因为实际上许多计算只需要计算一次即可重用。
但是,我现在所有查找都需要30%的处理时间。我想知道它是否可能是慢速RAM。但是,我仍然想尝试对其进行更多优化。
目前,我有以下内容:
public readonly int[] largeArray = new int[3000*2000];
public readonly int[] lookUp = new int[width*height];
Run Code Online (Sandbox Code Playgroud)
然后,我使用一个指针p(相当于width * y + x)执行查找以获取结果。
int[] newResults = new int[width*height];
int p = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++, p++) {
newResults[p] = largeArray[lookUp[p]];
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我无法进行整个阵列复制以进行优化。而且,该应用程序是高度多线程的。
在缩短函数堆栈方面取得了一些进展,因此没有吸气剂,而是直接从只读数组中检索。
我也尝试过转换为ushort,但是它似乎要慢一些(据我了解,这是由于字长引起的)。
IntPtr会更快吗?我将如何处理?
下面的附件是时间分配的屏幕截图:
我在替换数据帧中的值时遇到了一些麻烦.我想基于单独的表替换值.以下是我想要做的一个例子.
我有一张桌子,每排都是顾客,每列都是他们购买的动物.让我们调用这个数据帧table.
> table
# P1 P2 P3
# 1 cat lizard parrot
# 2 lizard parrot cat
# 3 parrot cat lizard
Run Code Online (Sandbox Code Playgroud)
我还有一个我将引用的表格lookUp.
> lookUp
# pet class
# 1 cat mammal
# 2 lizard reptile
# 3 parrot bird
Run Code Online (Sandbox Code Playgroud)
我想要做的就是创建一个名为新表new与功能替换所有值table与class列lookUp.我自己尝试使用一个lapply函数,但是我收到了以下警告.
new <- as.data.frame(lapply(table, function(x) {
gsub('.*', lookUp[match(x, lookUp$pet) ,2], x)}), stringsAsFactors = FALSE)
Warning messages:
1: In gsub(".*", lookUp[match(x, lookUp$pet), 2], x) :
argument …Run Code Online (Sandbox Code Playgroud)