c# - 在不使用 .Add() 的情况下通过索引动态地将项目添加到 List<int>

标签 c# list

我尝试使用 .Add() 动态地将项目添加到列表中,请注意,由于我项目的性质,我不能使用其他数据结构,如字典或简单数组,甚至是 HashSet .我需要一个锻炼解决方案来解决以下问题:

List<int> initA = new List<int>();
for (int i = 0; i < m; i++)
     initA[i] = i;

更新: 但是,如果有人建议我使用更好的数据结构来实现以下想法,那么我可以将其用作替代方案:

我已经设置了 A 例如:

A[0] = (1,2,3,4,5...)
A[1] = (10,20,30,40 ...)

我需要这样的直接访问:A[0][1]=2,A[1][3]=40 我不知道内部数组的大小是多少(集合元素的实际大小),这就是为什么我将这个集合实现为列表数组并且我不能将 Jagged Array 用于内部数组,因为我不知道它的大小。 set 元素在运行时添加。

对于解决第一个问题有什么建议吗?甚至建议替换表示此类集合的策略?

请注意,我需要高效的数据结构,因为 A 将存储 >1M 组。

这在 C++ 中是非常简单的任务,您可以在其中使用指针...事实上,这是我解决该问题的方法,因为在 C# 中使用不安全代码存在风险

最佳答案

您可以使用字典解决问题:

用法:

Vector<string> v = new Vector<string>();
v[0] = "item0";
v[10] = "item10";
string s = v[10]; //s will be "item10"

代码:

class Vector<T>
    {
        Dictionary<int,T> list;

        public Vector ()
        {
           this.list = new Dictionary<int,T>();
        }

        public T this [int index]{
            get
            {
                if (list.ContainsKey(index))
                    return list[index];
                else return default(T);
            }
            set {
                if (list.ContainsKey(index))
                    list[index] = value;
                else 
                    list.Add(index,value);
            }

        } 
    }

关于c# - 在不使用 .Add() 的情况下通过索引动态地将项目添加到 List<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31238782/

相关文章:

c# - 客户端兼容性检查管理

list - haskell 。跟踪索引以生成新列表

java - 列表列表列表

c# - 当按我搜索的字段排序时,我可以更快地搜索排序的 List<T> 吗?

c# - 在 C# 中使用 GDCM 库加载 DICOM 图像并转换为 System.Windows.Control.Image

c# - 我应该如何使用 Entity Framework 为静态引用数据建模?

javascript - Ajax 更新面板随机错误 'PRM_MissingPanel'

java - 如何从文件中读取和重写单例对象?

java - Hamcrest Matchers 包含匹配器列表

c# - 与 List <T> C# 重复