【问题标题】:If statement not sorting and working as expected如果语句未按预期排序和工作
【发布时间】:2016-07-18 22:22:31
【问题描述】:

if 函数有问题。 我有 3 个字符串数组(“orderID”、“id”和“name”)

  • orderID 最多包含 10 个订单号。
  • id 和 name 是包含几乎所有饮料的数据库。

如果“orderID”与“id”匹配,则将“name”添加到列表中,如果不匹配则添加字符串“Not found in database”。

当前代码:

            string x = "Not found in database";
        for (int i = 0; i < id.Length; i++)
        {
            foreach (string ids in orderID)
            {
                if (ids == id[i])
                {
                    listBox1.Items.Add(name[i]);
                    listBox2.Items.Add(name[i]);
                    break;
                }

                else
                {
                    listBox2.Items.Add(x);
                }
            }
        }

结果如下:

问题:

  • 第二个列表 - 当“orderID”与“id”匹配时,“name”被添加到列表中,但不在所需位置。我猜它是按数据库中的位置添加的。如何避免?
  • 第三个列表只是重复添加了“else”。否则它没有按预期工作。它正在为所有内容添加“未在数据库中找到”。有什么建议可以解决吗?

【问题讨论】:

  • 我不知道 list1 和 list2 代表什么,但有一件事是您可能想要添加到 else 中的两个列表框:else { listBox1.Items.Add(name[i]); listBox2.Items.Add(x); };那么你的清单会说,“Cofee,Cofee”是第一个,“Jack Daniels,Not Found”是下一个,等等。你可能想也可能不想反转你的 forforeach 循环,请记住,break 只会跳出最内层的循环,而您的外层会继续运行。

标签: c# arrays list sorting if-statement


【解决方案1】:

测试代码

        var orderIds = new[] {"3", "5"}.ToList();
        var ids = new[] { "1", "2", "3", "4", "5" }.ToList();
        var names = new[] { "1", "2", "3", "4", "5" }.ToList();

        foreach (var orderId in orderIds)
        {                
            if (ids.Contains(orderId))
            {
                listBox1.Items.Add(names[ids.IndexOf(orderId)]);
            }
            else
            {
                listBox1.Items.Add("Not in the list");
            }
        }

【讨论】:

  • 我对你投了反对票,因为我认为这不是一个好的答案。您没有提供任何关于问题是什么、OP 如何解决它的解释,并且您的答案与 OP 说明的数据并不真正相似。
  • @Massanu - 我遇到了一个小问题。 prntscr.com/bukxj5 - 再难的左栏有 10 项,右栏显示 10 次“不在列表中”。你知道如何解决它吗?
  • 当然,如果你修正你的答案,我会推翻我的反对票,甚至可能投赞成票:)
【解决方案2】:

第二个列表 - 当“orderID”与“id”匹配时,“name”被添加到 列表,但不在所需位置。我猜它是按位置添加的 数据库。如何避免?

您可以使用OrderBy() 订购您的商品:

List<string> orderedList = list.OrderBy(i => i);

这将按字母顺序按内容对它们进行排序。如果你想颠倒顺序,你可以使用OrderByDescending()

第三个列表只是重复添加了“else”。否则它不起作用 预期。它为所有内容添加“在数据库中找不到”。任何 建议如何解决?

我不确定您的 idorderID 变量是字符串还是数组(最好提一下)。但如果是数组,您可能需要检查所需的数组 contains 是否需要Id,而不是一一比较。

for (int i = 0; i < id.Length; i++)
        {
            if(orderID.Contains(id[i])
            {
                listBox1.Items.Add(name[i]);
                listBox2.Items.Add(name[i]);                     
            }
            else
            {
                listBox2.Items.Add(x);
            }
        }

如果是字符串,您只想比较它们(而不是逐个符号)。

请正确命名变量并显示它们的类型,因为这将有助于那些试图回答您的问题的人。

【讨论】:

    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2020-03-05
    • 2017-10-27
    • 2013-04-12
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多