因此,我需要采用人名和年龄,将它们存储在两个单独的数组中,按年龄对它们进行排序,然后显示结果在一个列表框中。我把所有的东西放回到列表框中。这听起来很简单,但foreach循环(从我对C#的基本理解)只能取其中一个数组的值。我需要同一行上的名称和年龄,因为它们连接在一起,所以我决定切换到for循环。然而,尽管我在年龄上的排序工作得很好,但我无法让这个名字与年龄匹配。这里是我的一些代码:C#:将字符串[]和int []元素连接在一起以便在排序时保持在一起int []
const int MAX = 100;
int count = 0;
int[] Age = new int[MAX];
string[] NameEntry = new string[MAX];
只是为了告诉你我是如何声明数组的。这是我的“商店” click事件:
int age;
if (txtName.Text == "")
{
lblWarningMessage.Text = "There is an error with your entries. A name must be entered!";
btnClearWarn.Show();
}
else
{
NameEntry[count] = txtName.Text;
if (int.TryParse(txtAge.Text, out age))
{
Age[count] = age;
txtAge.Clear();
txtName.Clear();
txtName.Focus();
lstbxResults.Items.Add(NameEntry[count] + " is " + Age[count].ToString() + " years old.");
count++;
}
else
{
lblWarningMessage.Text = "There is an error with your entries. The Age entry must be an integer.";
btnClearWarn.Show();
}
}
最后,排序操作以及随后的for循环将其添加到我的列表框:
Array.Resize(ref NameEntry, count);
Array.Resize(ref Age, count);
lstbxResults.Items.Clear();
int minAge = 0;
int minIndex = 0;
for (int a = 0; a < Age.Length - 1; a++)
{
minAge = Age[a];
minIndex = a;
for (int b = a + 1; b < Age.Length; b++)
{
if (Age[b] < minAge)
{
minAge = Age[b];
minIndex = b;
}
}
OrderByAges(ref Age[minIndex], ref Age[a]);
}
for (int c = 0; c < Age.Length; c++)
{
lstbxResults.Items.Add(NameEntry[c] + " is " + Age[c] + " years old.");
}
}
private void OrderByAges(ref int p1, ref int p2)
{
int temp = p2;
p2 = p1;
p1 = temp;
}
是的,我知道的Array.sort会更快,但这是为了达到同样的目的,这就是我被教导如何做到的。关于如何将“NameEntry”中的元素链接到“Age”的任何想法,并在排序时与Age一起更改?
无论何时您更改数组1中的项目的索引,请更改数组2中的相同索引。所以如果Age [2]更改为Age [5],请将Name [2]更改为Name [5]。但它会使LOT更加注重创建包含Age和Name的单个对象。 –
也许您应该创建一个类来将这两个('age'和'name')一起存储,并对类实例的数组进行排序? – MarcinJuraszek