【发布时间】:2018-02-03 17:30:15
【问题描述】:
我正在尝试制作一种排序方法(我知道它存在,但为了更好地理解编程,我想自己做)。 我正在尝试使用锯齿状数组,因为如果我有一个名字 John 和另一个名字 Albert,那么每个名字都有不同的长度,我想将名字上的每个字母转换为一个整数(我创建了 ConvertChartoInt 方法来做到这一点)然后存储它在一个数组中 假设我有一个包含 3 个名称的数组:John、Albert、Bryan 我正在将 John 、 Albert 、 Bryan 的所有字母转换为整数,并将它们放入锯齿状数组中
int[][] elements = new int[array.Length][];
for (int i=0;i<array.Length;i++)
{
elements[i] = new int[array[i].Length];
for (int j=0;j<array[i].Length;j++)
{
g = ConvertChartoInt(array[i][j]);
elements[i][j] = g;
}
}
现在我将每个名称的所有数字都放在了一个锯齿状数组中,我想首先比较它们,我只想比较第一列:
string name = "";
for (int i = 0; i < elements.GetLength(0); i++)
{
int[] temp = new int[elements[i].Length];
for (int j = 0; j < elements.GetLength(0); j++)
{
if (elements[j][i] < elements[i][i])
{
temp = elements[i];
elements[i] = elements[j];
elements[j] = temp;
name = array[i];
array[i] = array[j];
array[j] = name;
}
}
}
我知道这是不正确的,但我不知道该怎么做
我想首先比较第一列的元素,如果第二行的第一个元素更小,那么整个数组就会到位
前一个,但如果它们相等,那么我想检查第二个元素(我从 i=0 和 j=i+1 开始这工作正常,直到 i=1 它将我的数组从低到高存储得很好,但只是为了第一个元素,因为 i ++ 我让索引越界,我知道这不是我想要做的)
这是整个代码:
namespace ConsoleApp2
{
class Program
{
static int ConvertChartoInt(char x)
{
int number = 0;
switch (x)
{
case 'A':
number = 0;
break;
case 'B':
number = 1;
break;
case 'C':
number = 2;
break;
case 'D':
number = 4;
break;
case 'E':
number = 5;
break;
case 'F':
number = 6;
break;
case 'G':
number = 7;
break;
case 'H':
number = 8;
break;
case 'I':
number = 9;
break;
case 'J':
number = 10;
break;
case 'K':
number = 11;
break;
case 'L':
number = 12;
break;
case 'M':
number = 13;
break;
case 'N':
number = 14;
break;
case 'O':
number = 15;
break;
case 'P':
number = 16;
break;
case 'Q':
number = 17;
break;
case 'R':
number = 18;
break;
case 'S':
number = 19;
break;
case 'T':
number = 20;
break;
case 'U':
number = 21;
break;
case 'V':
number = 22;
break;
case 'X':
number = 23;
break;
case 'Y':
number = 24;
break;
case 'Z':
number = 25;
break;
case 'a':
number = 0;
break;
case 'b':
number = 1;
break;
case 'c':
number = 2;
break;
case 'd':
number = 4;
break;
case 'e':
number = 5;
break;
case 'f':
number = 6;
break;
case 'g':
number = 7;
break;
case 'h':
number = 8;
break;
case 'i':
number = 9;
break;
case 'j':
number = 10;
break;
case 'k':
number = 11;
break;
case 'l':
number = 12;
break;
case 'm':
number = 13;
break;
case 'n':
number = 14;
break;
case 'o':
number = 15;
break;
case 'p':
number = 16;
break;
case 'q':
number = 17;
break;
case 'r':
number = 18;
break;
case 's':
number = 19;
break;
case 't':
number = 20;
break;
case 'u':
number = 21;
break;
case 'v':
number = 22;
break;
case 'x':
number = 23;
break;
case 'y':
number = 24;
break;
case 'z':
number = 25;
break;
default:
Console.WriteLine("Unknown character!!");
break;
}
return number;
}
static string[] SortArray( string[] array)
{
int[][] elements = new int[array.Length][];
int g = 0;
for (int i=0;i<array.Length;i++)
{
elements[i] = new int[array[i].Length];
for (int j=0;j<array[i].Length;j++)
{
g = ConvertChartoInt(array[i][j]);
elements[i][j] = g;
}
}
string name = "";
for (int i = 0; i < elements.GetLength(0); i++)
{
int[] temp = new int[elements[i].Length];
for (int j = 0; j < elements.GetLength(0); j++)
{
if (elements[j][i] < elements[i][i])
{
temp = elements[i];
elements[i] = elements[j];
elements[j] = temp;
name = array[i];
array[i] = array[j];
array[j] = name;
}
}
}
return array;
}
static void Main(string[] args)
{
string[] names = { "John","Tom","Albert","Richard","Bryan" };
SortArray( names);
foreach (string el in names)
Console.Write(el + " ");
Console.ReadKey();
}
}
}
【问题讨论】:
-
在锯齿状 CHAR[][] 数组中转换字符串似乎过度。通常,您真正需要做的就是提供一个自定义比较器。
-
我将字符串 [] 数组转换为锯齿状数组而不是字符串变量