【问题标题】:How can I create a multi-type matrix?如何创建多类型矩阵?
【发布时间】:2011-12-27 14:08:08
【问题描述】:

我有这些数据:

4  pippo pluto paperino
10 marco paolo roberto
2  hello cruel world

我想将这些数据存储到一个多类型矩阵myMatrix。 (第一个字段为整数,其余为字符串)。

所以,如果我输入 myMatrix[1][2],我必须得到 paolo。如何在 C# 上做到这一点?

【问题讨论】:

    标签: c# arrays matrix


    【解决方案1】:
    Tuple<int, string, string, string>[]
    object[][]
    Dictionary<int, string[]>
    

    【讨论】:

      【解决方案2】:

      您不能使用数组来存储不属于同一继承链的不同类型的对象。

      object[][] 可以工作,但您不具备类型安全性,需要强制转换为目标类型。

      您可以使用Tuple&lt;int,string,string,string&gt;[](在 .NET 4.0 中引入),尽管您自己的简单类型会是一个更易读的选项。

      您可以使用其中一种集合类型来代替数组,例如List&lt;T&gt;,其中泛型类型是元组或您的自定义类型。

      在选择合适的数据结构之前,您确实需要考虑该集合的用途

      【讨论】:

      • +1 for Tuple 我不知道为什么人们不采用它,它的代码少得多,而且它是最好的工厂模式。
      • @SurjitSamra - 人们要么不知道它,要么不想使用它,因为它的语义很弱。就个人而言,我只会将它单个方法中使用,而不是作为 API 的一部分。
      【解决方案3】:

      最好的方法是创建一个代表数据的类,有 4 个字段(整数、字符串、字符串、字符串)。

      public class MyClass
      {
          public int Param1 { get; set; }
          public string Param2 { get; set; }
          public string Param3 { get; set; }
          public string Param4 { get; set; }
      }
      

      然后只需使用List&lt;MyClass&gt; 来存储您的数据。 要获取 Paolo,您需要使用 List[1].Param2(同时使用有意义的名称命名您的参数)。

      【讨论】:

        【解决方案4】:

        你可以使用Dictionary&lt;int, string[]&gt;来达到这样的效果:

        Dictionary<int, string[]> myMatrix = new Dictionary<int, string[]>();
        myMatrix.Add(4, new[] { "pippo", "pluto", "paperino" });
        ...
        
        
        //get
        
        myMatrix[4][1] == "pluto"
        

        【讨论】:

          【解决方案5】:

          Dictionary&lt;int, string[]&gt; 是我认为最简单的方法。

          更多关于Dictionary类型可以找到here

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-09-19
            • 2019-01-04
            • 1970-01-01
            • 2012-10-03
            • 2020-01-29
            • 1970-01-01
            • 1970-01-01
            • 2018-05-05
            相关资源
            最近更新 更多