Language agnostic 什么';对无序列表(即集合)建模的最佳方法是什么?
对构成一个集合的一组对象建模最自然的方法是什么?例如,您可能有一组用户对象,它们都是邮件列表的订户 显然,您可以将其建模为一个数组,但随后您必须对元素进行排序,无论是谁使用您的接口,都可能会对为什么要对数据进行任意排序感到困惑 可以使用散列,其中成员是映射到“1”或“true”的键,但在大多数语言中,对散列键可以是什么数据类型有限制Language agnostic 什么';对无序列表(即集合)建模的最佳方法是什么?,language-agnostic,Language Agnostic,对构成一个集合的一组对象建模最自然的方法是什么?例如,您可能有一组用户对象,它们都是邮件列表的订户 显然,您可以将其建模为一个数组,但随后您必须对元素进行排序,无论是谁使用您的接口,都可能会对为什么要对数据进行任意排序感到困惑 可以使用散列,其中成员是映射到“1”或“true”的键,但在大多数语言中,对散列键可以是什么数据类型有限制 在现代语言(PHP、Perl、Ruby、Python等)中,实现这一点的标准方法是什么?在Python中,您将使用数据类型。集合支持包含任何可散列对象,因此,如果您
在现代语言(PHP、Perl、Ruby、Python等)中,实现这一点的标准方法是什么?在Python中,您将使用数据类型。
集合
支持包含任何可散列对象,因此,如果您有一个自定义类需要存储在集合中,并且默认的可散列行为不合适,则可以实现\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
来实现所需的行为。在Python中,您将使用数据类型。set
支持包含任何可散列对象,因此如果您有一个需要存储在set中的自定义类,并且默认的可散列行为不合适,您可以实现\uuuuuuhash\ucode>来实现所需的行为。C>具有散列集通用集合
public class EmailAddress // probably needs to override GetHashCode()
{
...
}
var addresses = new HashSet<EmailAddress>();
public类EmailAddress//可能需要重写GetHashCode()
{
...
}
var addresses=newhashset();
C#具有HashSet泛型集合
public class EmailAddress // probably needs to override GetHashCode()
{
...
}
var addresses = new HashSet<EmailAddress>();
public类EmailAddress//可能需要重写GetHashCode()
{
...
}
var addresses=newhashset();
大多数现代语言都将有某种形式的集合数据结构。Java有,它实现了接口
在PHP中,可以使用数组存储数据。在添加新元素之前搜索数组,或者在插入所有元素后使用删除重复项。大多数现代语言都将具有某种形式的Set数据结构。Java有,它实现了接口
在PHP中,可以使用数组存储数据。在添加新元素之前搜索数组,或者在插入所有元素后使用删除重复项。在c中作为直接了解机器的替代:
- 对于小的、离散的和定义良好的范围:使用位数组指示每个可能项目的存在(设置为存在,取消设置为不存在)
- 对所有其他情况使用哈希表
根据需要编写函数以实现添加和删除项、测试是否存在、测试子集等
但是,正如其他答案所指出的,如果您只是想要功能,请使用已经调试好的语言功能或第三方库。在c中作为直接理解机器的替代:
- 对于小的、离散的和定义良好的范围:使用位数组指示每个可能项目的存在(设置为存在,取消设置为不存在)
- 对所有其他情况使用哈希表
根据需要编写函数以实现添加和删除项、测试是否存在、测试子集等
但是,正如其他答案所指出的,如果您只是想要功能,请使用已经调试好的语言功能或第三方库。很多时候,基于哈希的集是正确的选择,但是如果您不需要进行基于键的查找,也不必担心强制执行唯一值,那么向量或列表就可以了。毕竟,哈希表有开销
您似乎担心人们会认为向量中的顺序很重要,但我认为这是一种非常常见的用法,对于文档,您不应该混淆人们
这实际上取决于您希望如何访问和使用数据。很多时候,基于哈希的集合是正确的选择,但是如果您不需要执行基于键的查找,也不需要担心强制执行唯一值,那么向量或列表就可以了。毕竟,哈希表有开销
您似乎担心人们会认为向量中的顺序很重要,但我认为这是一种非常常见的用法,对于文档,您不应该混淆人们
这实际上取决于您希望如何访问和使用数据。而阵列通常是存储数据的最简单方式,无需任何其他要求。如果您只关心抽象,则通常会出于不同的原因使用其他数据类型(您希望附加数据,您希望在固定时间内搜索数据,您需要快速设置并集/交集等),您可以将其包装在某种无序外观中。而数组通常是存储数据的最简单方式,没有任何其他要求。通常使用其他数据类型有不同的原因(您希望附加数据,您希望在固定时间内搜索数据,您需要快速设置并集/交集等),如果您只关心抽象,您可以将其包装在某种无序外观中。在Perl中,我肯定会使用哈希。在其他语言中,我会对缺少哈希表示遗憾。在Perl中,我肯定会使用哈希。在其他语言中,我会为缺少散列而哀叹。那会是哪些其他语言?任何没有散列的语言。:)很多都是这样,包括我现在可能使用的任何语言,比如Java。那会是什么其他语言?任何没有哈希的语言。:)它们中有很多都可以,包括我现在可能使用的任何东西,比如Java。