我不想要任何排序或任何花哨的东西。我只想要两列,左边是名字,右边是数字。
像这样:
string/int[,] myArray = new string/int[,]();
每个字符串都有一个对应的int类型。但我不想用它来排序什么的。我知道我可以使用字典和其他我知道如何使用的高级方法。我想简单点,我想看看它最简单的形式如何创建一个像这样有两种类型的数组。我能想到的最简单的方法就是使用object,然后显式地转换。有更简单的方法吗?
最简单的方法是使用Tuple
类。您可以使用Tuple
和泛型参数来组合类以形成元组。例如:Tuple<string, int>
、Tuple<string, int, int?, char>
。以下是2参数版本的文档。在您描述的情况下,您可能需要一个类型为Tuple<string, int>[]
的实例。
您可以使用ItemX
方法访问Tuple
的元素:myTuple.Item1
, myTuple.Item2
等。
为了实际创建元组,我建议使用Tuple.Create
方法。例如:Tuple.Create("hello", 1)
将返回项目设置正确的Tuple<string, int>
。这些Create
方法允许您省略泛型参数。
作为旁注,您提到您不需要排序。通过在新的Tuple<string, int>
上执行LINQ查询(它实现了IEnumerable<Tuple<string, int>>
,因此您可以在其上执行LINQ的IEnumerable
扩展),您可以很容易地获得任意排序。例如,为了按int
部分排序,然后按元组的' string部分排序,您可以这样做:
myTupleArray.OrderBy(t => t.Item2).ThenBy(t => t.Item2);
还可以查看OrderByDescending
和ThenByDescending
以获得更多选项
元组将是一个很好的选择,就像我也说过的,但如果你只想用数组来实现这个结果,也许像这样…
Array[] m = new Array[2];
m[0] = new string[10]{"2","5","7","9","12","53","11","36","39","4"};
m[1] = new int[10] { 2, 5, 7, 9, 12, 53, 11, 36, 39, 4 };
int val = (int)m[1].GetValue(3);
string str = (string)m[0].GetValue(3);
为什么不使用Object
类
Object[] myarray = {string1,int1,string2,int2}
如果你想对strings
和ints
进行分组,你可以这样做:
Object[][] myarray = { {string1,int1}, {string2,int2} };
myarray[0][0] = string1 and myarray[0][1]=int1