所以我有一个特殊的问题。
我有一个标准的2D数组(无锯齿)和一个字符串数组。它们是通过2D数组的第一列链接的。
因此,这意味着我想将它们排序在一起(它不是基于键的系统,因此我不能将列用作字符串数组中的键,只是当2D数组中的行移动时,值也应移动在字符串数组的等效行中移动)。
不确定此处的最佳解决方案是什么。我尝试过的肮脏方法是标准的嵌套循环,它们通过第一列进行排序并相应地移动所有内容。
我只想知道是否有比此更好的解决方案,也许使用Linq之类的东西?
答案 0 :(得分:0)
TLDR:
private (int[,], string[]) SortByColumnNames(int[,] array, string[] columnNames)
{
var columnNameToIndex = columnNames.Select((c, index) => Tuple.Create(c, index));
var sortedColumns = columnNameToIndex.OrderBy(ci => ci.Item1, StringComparer.OrdinalIgnoreCase).ToList();
var sortedArray = new int[2, 3];
for (var newColumnIndex = 0; newColumnIndex < sortedColumns.Count; newColumnIndex++)
{
var oldColumnIndex = sortedColumns[newColumnIndex].Item2;
for (var rowIndex = 0; rowIndex < array.GetLength(1); rowIndex++)
{
sortedArray[newColumnIndex, rowIndex] = array[oldColumnIndex, rowIndex];
}
}
var resultColumnNames = sortedColumns.Select(ci => ci.Item1).ToArray();
return (sortedArray, resultColumnNames);
}
想法:
换句话说:
sortedArray[newColumnIndex, rowIndex] = array[oldColumnIndex, rowIndex]