【问题标题】:c# indexer for list of listc# 用于列表列表的索引器
【发布时间】:2011-08-26 15:37:13
【问题描述】:

大家好 我想为列表列表创建一个索引器以获取类似 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”,它会结束观看。

请问有人可以帮忙吗

感谢大家。

【问题讨论】:

  • 我猜list1.Capacity 不等于 0。
  • 你在哪个类中添加了this方法?
  • 我尝试了 list1.count 但它不起作用程序不检查 if 语句它是 abrot
  • 在您的代码中,您向我们展示了一个集合,但您却谈论获取?
  • 有一个 get 但它不在这里我很抱歉

标签: c# list indexing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的value 要么是list&lt;T&gt; 要么是T,这似乎很奇怪。

    如果没有更多信息,我建议您使用一个长的 T 列表来实现这一点。 然后,您会将myList&lt;T&gt;[i,j] 转换为底层list&lt;T&gt;[ i * numRows + j]

    根据需要进行验证。

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

    更新:

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

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

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

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

    【讨论】:

    • 谢谢,我想做一个矩阵类,它可能是矩形的或交错的很多
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您需要长度属性,而不是 Capactiy。

      用途:

       if (this.list1.Count < r )
      

      您的算法实际上没有多大意义,您可能想描述一下您要完成的工作。如果它不够大,您似乎正在尝试使其增长,但是两条单独路径中的逻辑(如果其他)不对齐。

      【讨论】:

      • 好吧,我很抱歉(如果 else ),但在我的代码中它的问题是我的程序不检查 if 语句它直接进入程序的末尾和 dispose 函数.. .
      • if 语句在一个集合中,请在您要设置的内容上发布代码,或者向我们展示您所指的神奇程序代码。
      • 我把这段代码放在 set 访问器下 if (this.matrixData.Count==0) { List col = new List(); col.Add(值); this.matrixData.Add(col);这个.身高 ++ ; this.Width ++ ; } else if (c == this.Width+1 ) { List col = new List(); col.Add(值); this.matrixData.Add(col); this.Width ++ ; } else if (r == this.Height+1) { this.matrixData[c-1].Add(value);这个.身高 ++ ; } else if (c == this.Width && this.matrixData[c-1].Count
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多