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,在这里我们可以一个接一个地添加用户,谢谢