标签: lookup

哪个更快,哈希查找或二进制搜索?

当给定一组静态对象(在某种意义上是静态的,一旦加载它很少会发生变化),需要重复的并发查找以及最佳性能,哪个更好,一个HashMap或一个二进制搜索使用一些自定义比较器的数组?

答案是对象或结构类型的函数吗?哈希和/或平等功能表现?哈希的独特性?清单大小? Hashset尺寸/尺寸?

我正在看的集合的大小可以是500k到10m之间的任何地方 - 这些信息很有用.

虽然我正在寻找一个C#答案,但我认为真正的数学答案不在于语言,所以我不包括那个标签.但是,如果需要注意C#特定的事情,那么需要该信息.

algorithm lookup hash hashmap binary-search

64
推荐指数
8
解决办法
5万
查看次数

如何根据某个IP获取国家/地区?

有谁知道一个简单的方法来检索给定IP地址的国家?最好是ISO_3166-1格式?

ip country lookup

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

查找表最佳实践:数据库表...或枚举

如果我们必须存储公司的可用职位(即经理,团队负责人等).存储它的最佳做法是什么?我有两个评论意见......"当然,欢迎你的"

  1. 将其存储为包含列ID和名称的DB表,并使用查询和连接处理它.
  2. 将其存储为枚举并忘记数据库表.

在我看来,如果我有更改项目,我会选择第一个解决方案.因此,我不会将这些选项硬编码为Enum.
如果我毫不怀疑数据不会改变(例如,性别:男性,女性),我可以选择Enum解决方案.

注意:我用英语编码,UI文化可能是阿拉伯语.如果我将使用Enum解决方案,我将在表示层中对基于文化的字符串进行硬编码,从最佳实践角度来看是否可以!

我想知道你的意见,如果我的想法符合最推荐的"最佳实践"?

lookup enumeration dbtable

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

如何查看Perl哈希是否已经有某个键?

我有一个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)

lookup perl hash key

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

快速计算64位整数的log2

一个伟大的编程资源,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)

c lookup 64-bit bit-manipulation 32bit-64bit

45
推荐指数
6
解决办法
3万
查看次数

在域驱动设计(DDD)中建模查找表的实用方法是什么?

我刚刚学习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一样.

我的结论:

  1. 查找表永远不是值对象,因为查找表总是具有标识.如果他们没有身份,你就会有重复,这没有多大意义.
  2. 只读查找表可以有一个存储库,但可能不需要存储库.存储库的目标是通过仅通过聚合强制访问来降低复杂性.通过聚合为您提供了一种确保可以实施业务规则的方法,例如,如果您没有汽车,则不会添加轮胎.
  3. 如果您在查找表上允许CRUD维护,那么查找表有自己的存储库是有意义的.
  4. 我最终将代码存储为结构的事实并没有使它们成为"值类型".Fowler在POEAA中说结构是一种价值类型.这是真的,结构是不可变的,这就是福勒说它们是"价值类型"的原因,但是我使用它们的方式不同.我使用结构作为一种轻量级方式来传递DTO,这些DTO在我们最初的创建之后并没有计划改变.事实上,我所使用的结构确实具有同一性,但由于它们是只读的,因此它们起到了结构的作用.
  5. 我一直在使用的一种模式,我在其他地方看不到的是使主键字段不可变.它们由构造函数设置,但它们是只读的(不是私有访问器),并且在创建对象后无法更改.

lookup domain-driven-design

43
推荐指数
2
解决办法
6469
查看次数

如果我只需要快速查找键,我应该使用C#字典吗?值是无关紧要的?

我需要一种能够插入条目的数据类型,然后能够快速确定是否已插入条目.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)

c# lookup dictionary

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

从查找中获取密钥

如何从通过.ToLookup()方法创建的Lookup <>获取密钥集合?

我有一个查找,它将int值映射到自定义类的实例组.我需要查找包含的所有int键的集合.有什么方法可以做到这一点,还是我必须单独收集和保存它们?

.net c# linq lookup linq-to-objects

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

用整数索引执行数组表查找的最快方法是什么?

我有一个移动大量数据的视频处理应用程序。

为了加快处理速度,我制作了一个查询表,因为实际上许多计算只需要计算一次即可重用。

但是,我现在所有查找都需要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会更快吗?我将如何处理?

下面的附件是时间分配的屏幕截图:

在此处输入图片说明

c# memory lookup

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

根据查找表替换数据框中的值

我在替换数据帧中的值时遇到了一些麻烦.我想基于单独的表替换值.以下是我想要做的一个例子.

我有一张桌子,每排都是顾客,每列都是他们购买的动物.让我们调用这个数据帧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与功能替换所有值tableclasslookUp.我自己尝试使用一个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)

lookup r dataframe

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