我有一个列表,其中包含
价格
代码
我已经设法将列表拆分为一个数组,但我想进一步拆分数组,以便我可以分别获取 Price
和 Code
并对Price
升序排列。进行排序时,我还需要将 Code
一起排序,因为 Price
是针对特定 Code
的。
所以它会是这样的: 原始列表:
1588,8DNY;1488,ACNY;1288,7DPE;1888,8HUC;1488,8WNH;
拆分为 arrPrice 后:
[1588,8DNY],[1488,ACNY],[1288,7DPE],[1888,8HUC],[1488,8WNH]
第二次拆分 2ndarrPrice:
[1588],[1488],[1288],[1888],[1488]
第二次拆分 2ndarrCode:
[8DNY],[ACNY],[7DPE],[8HUC],[8WNH]
按升序排列价格:
[1288],[1488],[1488],[1588],[1888]
代码将被相应地排序:
[7DPE],[ACNY],[8HUC],[8WNH]
第一次 split 后我卡住了。
if (lblprices.Text != "")
{
arrprice = lblprices.Text.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
Array.Sort(arrprice);
for (i = 0; i < arrprice.Length; i++)
{
arr2 = arrprice[i].Split(',');
SQL2 = "SELECT DISTINCT [TP].[TCode], ";
SQL2 += "[TP].[TName], ";
SQL2 += "[TP].[TName_CN], ";
SQL2 += "[TP].[TourType], ";
SQL2 += "[TP].[LastUpdateDate], ";
SQL2 += "[TP].[ValidityFrom], ";
SQL2 += "[TP].[ValidityTo], ";
SQL2 += "[CL].[CountryCode], ";
SQL2 += "[CL].[CityName] ";
SQL2 += "FROM [CL], [TP], [TourItinerary],[TourHotel] ";
SQL2 += "WHERE [TP].[Activation] = 1 ";
SQL2 += "AND [TP].[TCode] = '" + arr2[1] + "' ";
SQL2 += "ORDER BY [TP].[LastUpdateDate] DESC ";
objConnTour.Open();
SqlCommand command = new SqlCommand(SQL2, objConnTour);
SqlDataReader dataReader = command.ExecuteReader();
if (dataReader.Read())
{
html += "<tr><td class=\"border\">" + dataReader["TCode"] + "</td>";
html += "<td class=\"border\">" + dataReader["TName"] + "</td>";
html += "<td class=\"border\">" + dataReader["TName_CN"] + "</td>";
html += "<td class=\"border\">" + dataReader["TType"] + "</td>";
html += "<td class=\"border\">" + dataReader["LastUpdateDate"] + "</td>";
html += "<td class=\"border\">" + dataReader["ValidityFrom"] + "</td>";
html += "<td class=\"border\">" + dataReader["ValidityTo"] + "</td>";
html += "<td class=\"border\">" + dataReader["CountryCode"] + "</td>";
html += "<td class=\"border\">" + dataReader["CityName"] + "</td>";
html += "<td class=\"border\">from <span class=\"price-red\">S$<b>" + arr2[0] + "</b></span><td/></tr>";
}
dataReader.Close();
objConnTour.Close();
}
}
return html;
上面的代码无法按升序对价格进行排序。正如您在我的 arr2
拆分中看到的,我需要同时使用 Code
和 Price
,因为我将根据 从数据库中检索数据>代码
。
--------编辑------------
好吧,问题是如果价格在 1000-1999 之间,它会得到完美排序。 但是如果我有小于1000的价格,就不会按升序排序
示例是使用@jekcom提供的代码的结果截图
这是我还没有拆分 List 并从数据库中原始检索它们的时候
这是使用@jekcom 的代码排序的
请注意价格未按升序排序。
最佳答案
您发布的代码不起作用,因为您没有根据数组的 Price
部分对数组进行排序。如果你有 Linq
:
if (lblprices.Text != "")
{
arrprice = lblprices.Text.Split(new char[] { ';' },
StringSplitOptions.RemoveEmptyEntries);
var lst = arrprice.OrderBy(x => int.Parse(x.Split(',')[0])).ToList();
for (i = 0; i < lst.Count; i++)
{
arr2 = lst[i].Split(',');
//rest of your code ----------------
}
这应该有效,在 sql 术语中这应该给出
ORDER BY PRICE ASC, [TP].[LastUpdateDate] DESC
关于c# - 将一个数组拆分为另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13172857/