【发布时间】:2016-10-27 16:18:50
【问题描述】:
我正在尝试基于 1D 数组作为键对 2D 字符数组进行排序。我需要找到一个到目前为止没有在 key 中使用的 char,然后根据它进行排序。
铁:
AEITY
EDNTB
到
TEAIY
TDENB
基于密钥:
TEAIY
在第 0 行
我的代码处理多个字符并提供了不好的结果:
铁:
AAABN
TEAIY
TDENB
到
ABANA
TIEYA
TNDBE
但我得到的不是那个
ABANA
AIEYT
ENDBT
基于密钥:
阿巴纳
我发现的代码:
static char[][] SortSimiliarity(char[][] arr, char [] key, int arrRow)
{
Dictionary<char, int> dcKeyList = new Dictionary<char, int>();
for (var i = 0; i < key.Length; i++)
{
var counterCurrentKey = 0;
for (var j = 0; j < key.Length; j++)
{
if(key[i] == arr[arrRow][j])
{
//Console.WriteLine("{0} == {1}", key[i], arr[arrRow][j]);
if (!dcKeyList.ContainsKey(key[i]))
{
for (var k = 0; k < key.Length; k++)
{
//Console.WriteLine("x");
var temp = arr[k][j];
arr[k][j] = arr[k][i];
arr[k][i] = temp;
}
dcKeyList.Add(key[i], 1);
}
else
{
if (dcKeyList[key[i]] == counterCurrentKey)
{
Console.WriteLine("key is {0}", dcKeyList[key[i]]);
for (var k = 0; k < key.Length; k++)
{
//Console.WriteLine("x");
var temp = arr[k][j];
arr[k][j] = arr[k][i];
arr[k][i] = temp;
}
dcKeyList[key[i]]++;
}
counterCurrentKey++;
}
}
}
}
return arr;
}
我知道那个 ELSE 语句有问题,我在其中比较了键循环中 char 的当前计数。 谢谢你的想法。
【问题讨论】: