列表列表的 C# 索引器

本文关键字:列表 索引 | 更新日期: 2023-09-27 17:56:29

大家好我想为列表列表制作一个索引器来获取像这样的项目 myopj[i,j] .我的数据结构是这样的:

list<list<doubl>>

我尝试这样的代码,但它不起作用

public double this[int r, int c] 
   {
     set 
       {
         if (this.list1.Count == 0 )
                {
                    this.list1[r].Add(value);
                }
         else
                  this.list1[r][c]=value;
       } 
   }

当我观看它时,程序不会输入"如果",它会结束观看。

请问有人可以帮忙吗

并感谢大家.

列表列表的 C# 索引器

您应该检查计数,而不是容量。容量是列表可以具有的元素数,计数是列表中的实际项目数。因此,给定一个不为空的列表,容量不应为零,但计数可以是。

你的value要么是list<T>要么是T,这似乎很奇怪。

如果没有更多信息,我建议您使用单个长 T 列表来实现这一点。然后,您将myList<T>[i,j]转换为基础list<T>[ i * numRows + j]

根据需要点缀验证。

如果你真的,真的必须使用列表列表,弄清楚你是否想得到一个矩形矩阵(即第 i 行的列表与第 j 行的列表具有相同数量的元素),或者一个交错数组(其中每个列表都有独立数量的元素)。如果您处于第一种情况,请考虑使用适当数量的元素自动创建和填充行列表(使用default<T>初始化它们)

更新:

然后,如果你真正需要的是一个矩形矩阵,那么使用一个列表。它将具有 numRows * numColumns 元素。想象一下,不是将一行放在另一行下以创建矩阵,而是将一行的元素一个接一个地放置。

因此,如果您有:11 12 1321 22 2331 32 33

以列表形式,它们将是11 12 13 21 22 23 31 32 33

第一种形式的 X 和 Y(或 i 和 j)坐标与第二种形式列表中的索引之间存在简单的转换。

为什么要

检查容量?它可能永远不会为零。你的意思是检查Count吗?

你想要长度属性,而不是 Capactiy。

用:

 if (this.list1.Count < r )

你的算法并没有多大意义,你可能想描述你想要完成什么。看起来你正在试图让它增长,如果它不够大,但两个单独路径(如果其他)中的逻辑不一致。