Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中字符串数组的二次维排序#_C#_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

C# C语言中字符串数组的二次维排序#

C# C语言中字符串数组的二次维排序#,c#,arrays,sorting,multidimensional-array,C#,Arrays,Sorting,Multidimensional Array,我们有二维字符串数组,比如 "0" => {"John","23"}, "1" => {"Doe","12"}, "2" => {"Maria","41"}, ....... "0" => {"Maria","41"}, "1" => {"John","23"}, "2" => {"Doe","12"}, ....... 我们想对这个数组进行如下排序 "0" => {"John","23"}, "1" => {"Doe","1

我们有二维字符串数组,比如

"0" => {"John","23"},
"1" => {"Doe","12"},
"2" => {"Maria","41"},
 .......
 "0" => {"Maria","41"},
 "1" => {"John","23"},
 "2" => {"Doe","12"},
     .......
我们想对这个数组进行如下排序

"0" => {"John","23"},
"1" => {"Doe","12"},
"2" => {"Maria","41"},
 .......
 "0" => {"Maria","41"},
 "1" => {"John","23"},
 "2" => {"Doe","12"},
     .......
我们的数组代码String[,]kelimedeger=新字符串[20,2]

我们需要kelimedeger[i,1]

关于排序的订单 我在这里看到的一个问题是,您的第二个“字符串”实际上不是一个字符串,而是一个数字。因此,你实际上有一个有名字和年龄的人

为什么这很重要? 排序取决于数据的类型。字符串按字母顺序排序,而数字按数字排序

考虑以下列表:

1, 2, 17, 11, 100, 20, 34
这可以通过多种方式进行排序

Numerical    Alphabetical
---------    ------------
1            1
2            100
11           11
17           17
20           2
34           20
100          34
考虑到您很可能希望按数字排序,您需要将数据存储为
int
,而不是
string


如何存储数据? 这取决于您的用例。如果保证名称是唯一的,那么您可以使用
字典
。否则,我建议您创建一个类
Person
,并使用
ICollection
存储它们

作为
字典
如果保证名称在您的域中是唯一的,那么这种方法非常有用。此外,它只使用内置类型

命名空间字典测试
{
公共课程
{
公共静态void Main(字符串[]args)
{
//创建一个字典来存储人
字典人物=新字典();
//添加一些人。请注意,这是类型安全的
添加(“John”,23);
添加(“Doe”,12);
添加(“Maria”,41岁);

//people.Add(“John”,55);//要对二维数组进行排序,您需要将每行转换为一维数组,并将其保存在
列表
或类似内容中。然后您可以按列对列表进行排序。排序后,您需要将列表转换回二维数组。 以下是一种可用于排序的方法:

public static T[,] Sort2DArray<T>(T[,] array, int column, bool ascending = true)
{
    int i = 0;
    List<T[]> items = new List<T[]>();

    int columns = array.GetLength(1);
    int rows = array.GetLength(0);

    T[] obj = new T[columns];
    foreach (var item in array)
    {
        obj[i % columns] = item;
        if ((i + 1) % 2 == 0)
        {
            items.Add(obj);
            obj = new T[columns];
        }

        i++;
    }

    var ordered = ascending ? items.OrderBy(a => a[column]) : items.OrderByDescending(a => a[column]);


    T[,] result = new T[rows, columns];
    for (int r = 0; r < rows; r++)
    {
        var row = ordered.ElementAt(r);
        for (int c = 0; c < columns; c++)
        {
            result[r, c] = row[c];
        }
    }
    return result;
}

将二维数组转换为一维数组并返回并不是对值进行排序的最佳例程。最佳方法是创建一个类来存储数据,正如David Stocker和Tim Schmelter所说。

为什么不开始使用类?例如:
var kelimedeger=new List{new User{Age=41,Name=“Maria”}
@TimSchmelter我猜。虽然背景可能完全不同。@TimSchmelter我们可以更喜欢它。你能解释一下我们如何按年龄对这个列表进行排序吗?@MahirTahaÖzdin:
kelimedeger=kelimedeger.OrderBy(u=>u.age.ToList()
kelimedeger.sort((u1,u2)=>u1.age.CompareTo(u2.age));
@TimSchmelter我们有一个for循环,它一个接一个地添加所有用户,在这里我们将定义var kelimedeger,在这里我们可以一个接一个地添加用户,谢谢