【发布时间】:2011-12-27 14:08:08
【问题描述】:
我有这些数据:
4 pippo pluto paperino
10 marco paolo roberto
2 hello cruel world
我想将这些数据存储到一个多类型矩阵myMatrix。 (第一个字段为整数,其余为字符串)。
所以,如果我输入 myMatrix[1][2],我必须得到 paolo。如何在 C# 上做到这一点?
【问题讨论】:
我有这些数据:
4 pippo pluto paperino
10 marco paolo roberto
2 hello cruel world
我想将这些数据存储到一个多类型矩阵myMatrix。 (第一个字段为整数,其余为字符串)。
所以,如果我输入 myMatrix[1][2],我必须得到 paolo。如何在 C# 上做到这一点?
【问题讨论】:
Tuple<int, string, string, string>[]
object[][]
Dictionary<int, string[]>
【讨论】:
您不能使用数组来存储不属于同一继承链的不同类型的对象。
object[][] 可以工作,但您不具备类型安全性,需要强制转换为目标类型。
您可以使用Tuple<int,string,string,string>[](在 .NET 4.0 中引入),尽管您自己的简单类型会是一个更易读的选项。
您可以使用其中一种集合类型来代替数组,例如List<T>,其中泛型类型是元组或您的自定义类型。
在选择合适的数据结构之前,您确实需要考虑该集合的用途。
【讨论】:
最好的方法是创建一个代表数据的类,有 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<MyClass> 来存储您的数据。
要获取 Paolo,您需要使用 List[1].Param2(同时使用有意义的名称命名您的参数)。
【讨论】:
你可以使用Dictionary<int, string[]>来达到这样的效果:
Dictionary<int, string[]> myMatrix = new Dictionary<int, string[]>();
myMatrix.Add(4, new[] { "pippo", "pluto", "paperino" });
...
//get
myMatrix[4][1] == "pluto"
【讨论】:
Dictionary<int, string[]> 是我认为最简单的方法。
更多关于Dictionary类型可以找到here
【讨论】: