c#多维数组排序基于用户输入
本文关键字:用户 输入 于用户 数组排序 | 更新日期: 2023-09-27 18:08:17
如何在c#中对2D数组进行排序
我看过这个问题的其他答案,但它们都不完全符合我的需要。
数组为variable height * 5 across
数组保存字符串
我需要数组根据任一列排序,例如按字母顺序排序的第三列,但所有其他列必须更新。
有人知道一个快速和简单的解决方案吗?
我的代码是一团乱,这里是一个简短的版本:
string[,] tmp = new string[2, 3];//this is filled with strings
string y = Console.ReadLine();
int x = Convert.ToInt32(y);
// sort tmp based on x column
如何在c#中对二维数组进行排序?包含一种可能的解决方案,通过将数据读入数据表,然后使用对象的方法进行排序:
// assumes stringdata[row, col] is your 2D string array
DataTable dt = new DataTable();
// assumes first row contains column names:
for (int col = 0; col < stringdata.GetLength(1); col++)
{
dt.Columns.Add(stringdata[0, col]);
}
// load data from string array to data table:
for (rowindex = 1; rowindex < stringdata.GetLength(0); rowindex++)
{
DataRow row = dt.NewRow();
for (int col = 0; col < stringdata.GetLength(1); col++)
{
row[col] = stringdata[rowindex, col];
}
dt.Rows.Add(row);
}
// sort by third column:
DataRow[] sortedrows = dt.Select("", "3");
// sort by column name, descending:
sortedrows = dt.Select("", "COLUMN3 DESC");
首先,我们要将多维数组转换为代表行的单维数组序列,以便每一行都可以作为一个单元来操作:
public static IEnumerable<T[]> GetRows<T>(T[,] array)
{
for (int i = 0; i < array.GetLength(0); i++)
{
T[] row = new T[array.GetLength(1)];
for (int j = 0; j < row.Length; j++)
{
row[j] = array[i, j];
}
yield return row;
}
}
然后我们还需要一个方法来做相反的操作,当我们完成后返回一个多维数组:
public static T[,] ToMultiDimensionalArray<T>(T[][] rows)
{
T[,] output = new T[rows.Length, rows[0].Length];
for (int i = 0; i < rows.Length; i++)
for (int j = 0; j < rows[0].Length; j++)
{
output[i, j] = rows[i][j];
}
return output;
}
现在我们只需要对数组序列进行排序,Linq使这很容易:
tmp = ToMultiDimensionalArray(GetRows(tmp)
.OrderBy(row => row[2]).ToArray());