【问题标题】:Only looking to existing variables仅查看现有变量
【发布时间】:2018-09-13 11:09:41
【问题描述】:

我要问的问题会非常具体。

假设我们有一个具有一定大小的数组/哈希表。 并不是这个数组/表中的每个空间都被使用了。 例如,假设我们有一个名为“arr”的整数数组,其大小为 150。

arr[3] = 5;
arr[16] = 22;
arr[127] = 3;

除了这三个之外,0 到 150 之间的所有其他空格都是空的。 现在假设我们要打印此数组中的每个数字(不为空)。

我们可以创建一个从 0 到 150 的循环来检查数组空间是否为空,如果不是则打印它。 但这意味着仅打印 3 个变量我们需要进行 150 次检查。

我想知道是否可以直接打印这些数字而无需查看整个数组。 我的意思不是检查空值,而是直接从一个非空变量到另一个非空变量。

我的问题也与哈希表相同,假设我们没有为 0 和哈希表大小之间的每个数字创建表。是否可以只查看现有表而不是每次都检查表是否存在。

即使它不可能用数组或哈希表来做我所说的,是否有任何方法可以直接从一个变量转到下一个变量。 (链接列表不是我要搜索的)

【问题讨论】:

  • C# 中没有 null int 这样的东西。你的意思是他们是int? 类型?
  • 使用List<int> 并在需要时向其中添加项目。它基本上是一个可调整大小的数组。
  • 我会在这里使用 Dictionary<int, int> 而不是数组。您可以使用字典的方法来获取现有的键(键将是数组索引)。
  • 这是 C++ 还是 C#?

标签: c# c++ arrays hashtable


【解决方案1】:

数组是一个固定大小——连续内存数据结构。没有办法知道哪个元素已分配,哪个未分配(无需单独记住分配的索引或迭代)。

HashTable(或字典)——不是一个连续的内存结构。在我看来,只有 3 个条目应该(理想情况下)存储在 HashTable 中。您根本不会存储其他(空)项目。你可以对 List 做同样的事情。

如果出于某种原因,您将 0 到 150 的所有内容添加到 HashTable,其中除了这 3 个之外的所有值都为 Null。同样,您没有任何更简单的方法,只能通过迭代来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多