拥有具有两种数据类型的强类型数组的最简单方法

本文关键字:强类型 数组 最简单 方法 数据类型 两种 拥有 | 更新日期: 2023-09-27 18:19:13

我不想要任何排序或任何花哨的东西。我只想要两列,左边是名字,右边是数字。

像这样:

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);

还可以查看OrderByDescendingThenByDescending以获得更多选项

元组将是一个很好的选择,就像我也说过的,但如果你只想用数组来实现这个结果,也许像这样…

            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}

如果你想对stringsints进行分组,你可以这样做:

Object[][] myarray = { {string1,int1}, {string2,int2} };
myarray[0][0] = string1 and myarray[0][1]=int1