[英]C# Compare 2 strings, sorting, put into array
嗨,我现在更好地提出我的问题。
在foreach命令中,我获取数组中的temp(保存变量)值。 我临时保存的值来自datagridview单元。
在下一步中,在for命令中,我想比较2个字符串,该字符串和下一个字符串,如果第一个字符串大于第二个字符串,我想更改其位置。 但是有一个问题,他们甚至不改变仓位,他们甚至得到一个空值,我不明白为什么他们得到一个空值。
我认为他们由于foreach命令而得到一个空值,索引[i]保持不变,但是如果我将i = i + 1放进去,该命令将超出范围。
谢谢
SENC。 尼科
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[i].Value == null)
{
//MessageBox.Show("This row is empty");
break;
}
if (row.Cells[i].Value != null)
{
temp = row.Cells[i].Value.ToString();
UnsortArray[i] = temp;
i = i + 1;
}
}
for (int a = 0; a < MaxZeilen; a++)
{
if (i < MaxZeilen)
{
*if (String.Compare(UnsortArray[a], UnsortArray[a + 1]) > 0)
{
UnsortArray[a] = temp;
UnsortArray[a + 1] = temp2;
temp = UnsortArray[a + 1];
temp2 = UnsortArray[a];
}*
}
}
for (int i = 0; i < MaxZeilen; i++)
{
UnsortArray[i] = SortArray[i];
MessageBox.Show(UnsortArray[i]);
}
您倒退了,在分配临时变量之前将数组分配给临时变量:
UnsortArray[a] = temp;
UnsortArray[a + 1] = temp2;
temp = UnsortArray[a + 1];
temp2 = UnsortArray[a];
尝试:
temp = UnsortArray[a + 1];
temp2 = UnsortArray[a];
UnsortArray[a] = temp;
UnsortArray[a + 1] = temp2;
您在这里UnsortArray[i] = SortArray[i];
做了一次UnsortArray[i] = SortArray[i];
。 我想你的意思是SortArray[i] = UnsortArray[i];
将其替换为以下代码块
int i= 0;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row != null)
{
temp = row.ToString();
UnsortArray[i] = temp;
i = i + 1;
}
}
for (int a = 0; a < MaxZeilen; a++)
{
if (String.Compare(UnsortArray[a], UnsortArray[a + 1]) > 0)
{
temp = UnsortArray[a + 1];
UnsortArray[a + 1] = UnsortArray[a];
UnsortArray[a] = temp;
}
}
for (int i = 0; i < MaxZeilen; i++)
{
MessageBox.Show(UnsortArray[i]);
}
temp = UnsortArray[a + 1];
UnsortArray[a + 1] = UnsortArray[a];
UnsortArray[a] = temp;
代替
UnsortArray[a] = temp;
UnsortArray[a + 1] = temp2;
temp = UnsortArray[a + 1];
temp2 = UnsortArray[a];
为什么要使用数组而不是List?
该页面介绍了排序列表。
这是对代码的一些改进。 您在顶部出现了一个错误,该错误可能导致无限循环,请仅使用Array.Sort方法。 如果您希望其排序不同,请添加一个IComparable接口。
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[i].Value == null)
{
//MessageBox.Show("This row is empty");
i++;
break;
}
else (row.Cells[i].Value != null)
{
UnsortArray[i] = row.Cells[i].Value.ToString();
i++;
}
}
Array.Sort(UnsortArray);
SortArray = UnsortArray;
List<String> itemList = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[0].Value = null)
{
itemList.Add(row.Cells[0].Value.ToString());
}
}
itemList.Sort();
string[] SortedArray = itemList.ToArray();
for (int j = 0; j < SortedArray.Length; j++)
{
MessageBox.Show(SortedArray[j]);
}
如果此代码不起作用,则添加
foreach(string item in itemList)
{
MessageBox.Show(item);
}
在第一个foreach循环之后,检查值
int MaxArrayCount = 0;
foreach(DataGridViewRow row in dataGridView1.Rows)
{
MaxArrayCount += row.Cells.Count;
}
string[] UnsortArray= new string[MaxArrayCount];
int cnt = 0;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
for (int i = 0; i < row.Cells.Count; i++ )
{
if (row.Cells[i].Value != null)
{
temp = row.Cells[i].Value.ToString();
UnsortArray[cnt] = temp;
cnt++;
}
}
}
for (int b = 1; b < UnsortArray.Count; b++)
{
for (int a = 0; a < UnsortArray.Count - 1; a++)
{
if (String.Compare(UnsortArray[a], UnsortArray[a + 1]) > 0)
{
temp = UnsortArray[a + 1];
UnsortArray[a + 1] = UnsortArray[a];
UnsortArray[a] = temp;
}
}
}
for (int i = 0; i < MaxZeilen; i++)
{
MessageBox.Show(UnsortArray[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.