Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将一个数组拆分为另一个数组_C#_Sql - Fatal编程技术网

C# 将一个数组拆分为另一个数组

C# 将一个数组拆分为另一个数组,c#,sql,C#,Sql,我有一份清单,里面有 价格 代码 我已经设法将列表拆分为一个数组,但我想进一步拆分数组,这样我就可以分别获得Price和code,并将Price按升序排序。当排序发生时,我需要将代码也一起排序,因为价格是针对特定的代码 所以它将是这样的: 原始清单: 1588,8DNY;1488,ACNY;1288,7DPE;1888,8HUC;1488,8WNH; 拆分为价格后: [1588,8DNY],[1488,ACNY],[1288,7DPE],[1888,8HUC],[1488,8WNH] 第二次

我有一份清单,里面有

  • 价格
  • 代码
  • 我已经设法将列表拆分为一个数组,但我想进一步拆分数组,这样我就可以分别获得
    Price
    code
    ,并将
    Price
    按升序排序。当排序发生时,我需要将
    代码
    也一起排序,因为
    价格
    是针对特定的
    代码

    所以它将是这样的: 原始清单:

    1588,8DNY;1488,ACNY;1288,7DPE;1888,8HUC;1488,8WNH;
    
    拆分为价格后:

    [1588,8DNY],[1488,ACNY],[1288,7DPE],[1888,8HUC],[1488,8WNH]
    
    第二次拆分第二次定价:

    [1588,8DNY],[1488,ACNY],[1288,7DPE],[1888,8HUC],[1488,8WNH]
    
    [1588],[1488],[1288],[1888],[1488]
    
    第二次拆分第二个标准代码:

    [8DNY],[ACNY],[7DPE],[8HUC],[8WNH]
    
    按升序排序价格:

    [1288],[1488],[1488],[1588],[1888]
    
    代码将被相应地排序:

    [7DPE],[ACNY],[8HUC],[8WNH]
    
    我在第一次分裂后被卡住了

      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&nbsp;<span class=\"price-red\">S$<b>" + arr2[0] + "</b></span><td/></tr>";
                }
    
                dataReader.Close();
    
                objConnTour.Close();
            }
        }
        return html;
    
    if(lblprices.Text!=“”)
    {
    arrprice=lblprices.Text.Split(新字符[]{';'},StringSplitOptions.RemoveEmptyEntries);
    Array.Sort(arrprice);
    对于(i=0;i
    上述代码将无法按升序对价格进行排序。正如您在我的
    arr2
    拆分中所看到的,我需要将
    code
    Price
    放在一起,因为我将根据
    code
    从数据库检索数据

    --------编辑---------

    好的,问题是如果价格在1000-1999年之间,它会得到完美的排序。 但如果我的价格低于1000,它将不会以升序的方式排序

    示例是使用@jekcom提供的代码的结果截图

    这是我没有拆分列表并从数据库中原始检索它们的时候

    这是使用@jekcom代码排序的一个


    请注意价格是如何不按升序排序的。

    您可以使用
    KeyValuePair
    s的
    列表
    并使用LINQ对它们进行排序

    IList<KeyValuePair<string, decimal>> items = new List<KeyValuePair<string, decimal>>();
    items.Add(new KeyValuePair<string, decimal>("8DTY", 1589));
    items.Add(new KeyValuePair<string, decimal>("1DNY", 1688));
    items.Add(new KeyValuePair<string, decimal>("8DNY", 1888));
    items.Add(new KeyValuePair<string, decimal>("8DNY", 1588));
    items.Add(new KeyValuePair<string, decimal>("8ENY", 1589));
    
    IOrderedEnumerable<KeyValuePair<string,decimal>> result =items.OrderBy(item => item.Value);
    
    foreach (var keyValuePair in result)
    {
        MessageBox.Show(keyValuePair.Key + " " + keyValuePair.Value);
    }
    
    IList items=new List();
    添加(新的KeyValuePair(“8DTY”,1589));
    添加(新的KeyValuePair(“1DNY”,1688));
    添加(新的KeyValuePair(“8DNY”,1888));
    添加(新的KeyValuePair(“8DNY”,1588));
    添加(新的KeyValuePair(“8ENY”,1589));
    IOrderedEnumerable结果=items.OrderBy(item=>item.Value);
    foreach(结果中的var keyValuePair)
    {
    MessageBox.Show(keyValuePair.Key+“”+keyValuePair.Value);
    }
    
    一种方法:

    定义自定义comperer以对阵列进行排序 然后将其传递给sort方法

    比较器

    public class ProductComparer : IComparer<string>
    {
        public int Compare(string x, string y)
        {
            string[] _x = x.Split(',');
            string[] _y = y.Split(',');
            double priceY = double.Parse(_y[0]);
            double priceX = double.Parse(_x[0]);
    
            return priceX.CompareTo(priceY);
        }
    }
    

    下面是如何使用Linq

    string s = "1588,8DNY;1488,ACNY;1288,7DPE;1888,8HUC;1488,8WNH";
    
    var OrderedResult= s.Split(';').ToList<string>()
                        .Select(item => item.Split(','))
                        .Select(item => new { price = Int32.Parse(item[0]), code = item[1] })
                        .OrderBy(item => item.price);
    
    foreach(var item in OrderedResult)
    {
       var sql = "select ..... where price=" + item.price + " and code=" + item.code;
       execute(sql);
    }
    
    string s=“1588,8DNY;1488,ACNY;1288,7DPE;1888,8HUC;1488,8WNH”;
    var OrderedResult=s.Split(“;”).ToList()
    .Select(item=>item.Split(','))
    .Select(item=>new{price=Int32.Parse(item[0]),code=item[1]})
    .OrderBy(项目=>项目价格);
    foreach(OrderedResult中的var项)
    {
    var sql=“选择…”其中price=“+item.price+”和code=“+item.code;
    执行(sql);
    }
    
    您发布的代码不起作用,因为您没有根据数组的
    部分对数组进行排序。如果您有
    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 ----------------
        }
    

    你能指出你到底在哪里出错/不工作吗?jekcom的回答是错误的。请看我的或codeIgnoto的答案是错误的。请不要用字符串比较代替数字比较。在2和12作为价格的情况下,这会给出错误的结果。请在字符串比较器中使用int.Parse当我尝试运行代码时,出现以下错误:“System.Collections.Generic.List”不包含“Length”的定义,并且找不到接受类型为“System.Collections.Generic.List”的第一个参数的扩展方法“Length”(您是否缺少使用指令或程序集引用?@ymcCole噢,请使用
    Count
    而不是长度。当答案在我们自己的机器上发布时会发生这些事情:)请找到编辑:)@ymcCole我个人要求您选择CodeIgnoto的答案并接受他的答案(尽管您可以投票支持我们两人):)@nawfal嗯,你的答案也不是最正确的。我不知道这个特殊情况,但价格有时有小数点。所以你的代码在这种情况下会失败case@jekcom这是一个很小的问题,OP可以根据需要进行调整。重点是给他一个想法。如果你谈论的是价格,那么你的双人床也不合适。你的原创作品中引人注目的小毛病
    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 ----------------
        }
    
    ORDER BY PRICE ASC, [TP].[LastUpdateDate] DESC