【问题标题】:What's the advantage of buckets.Dictionary over using an array? [closed]buckets.Dictionary 与使用数组相比有什么优势? [关闭]
【发布时间】:2014-04-27 16:23:10
【问题描述】:

对于 javascript,有 buckets,对于 typescript,有 typescript-collections。对于很多课程,我看到了优势。但是使用 Dictionary 类而不是 javascript 关联数组有什么优势呢?

我并不是要诋毁这两个库,只是为了了解其中的区别,以便更好地理解 javascript。

【问题讨论】:

  • 老实说——我想说这只是一个意见问题。我的感觉是像Dictionary 这样的基本课程是为了舒适而不是必要的。一些辅助函数可能有用,但除此之外,特别是对于关联数组,我会直接使用它。还有其他类似 Stack/Queue/Linked List 的方法,它们更适合一个平台,该平台的其他地方已经不容易访问该功能(即使它不是同名的)。 JavaScript 可以在没有包装器的情况下完成这些工作。我强烈建议您查看代码并自行决定。
  • @WiredPrairie 我认为您所说的意见是一个答案 - 除了 API 的偏好之外没有其他区别。
  • 我将此标记为保留,因为它实际上只是一个意见问题,除了说没有正确答案之外,真的没有“正确答案”。一些开发人员非常喜欢超级丰富的对象模型、类等,而另一些则不喜欢。 :)
  • @WiredPrairie 我打算让它有点不同。 collections.LinkedList 添加了您无法从数组中获得的功能。我的问题是 - Dictionary 是否添加了功能,或者只是以不同的方式提供相同的功能。但我可以看出它是如何被解读为您更喜欢哪种方法的。
  • 我坚信深入研究这样的代码并了解它的工作原理。这是访问源代码的重要部分。我对使用镜像其他平台的库也持谨慎态度,因为它们可能不是必需的,并且可能不是在新平台上做某事的最佳方式。

标签: javascript dictionary collections typescript


【解决方案1】:

总的来说,当人们使用多种语言时,他们喜欢在这些语言之间转移模式。这是对这是好事还是坏事的判断——在许多情况下,被移植到语言的特性来自另一个范式,实际上可能会与它被转移到的语言概念产生冲突。

在不好的情况下,迁移不尊重目标语言(即,有更好的方法可以在不编写不必要的类的情况下达到相同的结果)。在最坏的情况下,转移不尊重源语言。我见过几次尝试将 C# Linq 扩展转移到 JavaScript,所有这些都立即处理 Linq 查询并将结果存储在第二个数组中 - Linq 的好处之一是它会在枚举结果时处理查询,这允许更多数据进行处理而不是存储在内存中(作为一个例子)。

我之前移植过功能,主要是为了好玩,因为这是一种有趣的学习体验(例如,我写了一个Linq example to demonstrate the problem with other Linq examples that were being posted)。

如果为了让目标语言更熟悉而转移了一个特征或模式,那很可能是出于错误的原因。

如果它被转移是因为它添加了一个受另一种语言的良好模式启发的所需功能,那很好。对此的严峻考验是它是否可以让您免于重复样板代码,例如在添加之前检查现有数组中的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2010-09-24
    • 2010-12-27
    • 2015-04-06
    • 2013-05-09
    • 2017-05-29
    • 2017-11-24
    相关资源
    最近更新 更多