c#indexer列表列表

时间:2011-05-16 17:51:32

标签: c# list indexing

大家好 我想创建一个索引器列表列表来获取像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;
       } 
   }

当我观看时,程序不会输入'if'并结束观看。

请有人可以提供帮助

感谢所有人。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您的value可能是list<T>T,这似乎很奇怪。

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

根据需要进行验证。

如果你真的,真的必须使用列表列表,如果你想最终得到一个矩形矩阵(即行i的列表与行{{1}的列表具有相同数量的元素交错数组(每个列表都有一个独立数量的元素)。 如果您是第一种情况,请考虑使用适当数量的元素自动创建和填充行列表(使用j初始化它们)

更新

然后,如果您真正需要的是矩形矩阵,那么使用列表。 它将具有numRows * numColumns元素。 想象一下,不是将一行放在另一行之下来制作矩阵,而是将一行的元素一个接一个地放在一起。

所以,如果你有: 11 12 13 21 22 23 31 32 33

以列表形式出现 11 12 13 21 22 23 31 32 33

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

答案 2 :(得分:1)

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

使用:

 if (this.list1.Count < r )

您的算法并没有多大意义,您可能想要描述您要完成的任务。看起来你试图让它增长,如果它不够大,但两个单独路径中的逻辑(如果没有)不对齐。

答案 3 :(得分:1)

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