【问题标题】:C# How to search the index in an Array to find the valueC#如何在数组中搜索索引以查找值
【发布时间】:2015-11-20 06:33:07
【问题描述】:

我一直在 C# 中闲逛,到目前为止我做得很好,但我正在尝试找出如何在多维数组中搜索索引。我有一个数组,用于存放每天制造的产品。这会通过询问用户输入(使用 InputBox)来显示每周每天生产的产品。第 1 周星期一 = 10 只熊,星期三 = 20 只熊。第 2 周星期二 = 30,星期五 = 11 等。我知道 IndexOf,但这是为了找到给定值的索引。我想搜索索引并找到并显示该值。

代码如下:

class Day
{
    private string monday;
    private string tuesday;
    private string wednesday;
    private string thursday;
    private string friday;

    public string Monday
    {
        get { return monday; }
        set { monday = value; }
    }
    public string Tuesday
    {
        get { return tuesday; }
        set { tuesday = value; }
    }
    public string Wednesday
    {
        get { return wednesday; }
        set { wednesday = value; }
    }
    public string Thursday
    {
        get { return thursday; }
        set { thursday = value; }
    }
    public string Friday
    {
        get { return friday; }
        set { friday = value; }
    }
}

private void btnSelect_Click(object sender, EventArgs e)
{
    Day[] week = new Day[4];
    //Week[0] = new Day(); Ask users for input box value
    E.g.Monday = Microsoft.VisualBasic.Interaction.InputBox("Enter the amount of products made on Monday for week 1", "Product Amount"),etc

    //Prints the amounts
    txtOutput.Text += "The product allocation is as follows:" + "\r\n" + "\r\n";
    txtOutput.Text += "                      Mon    Tue     Wed     Thu     Fri  \r\n";

    int weeknum = 0;
    //Iterates through and shows the values for each day of the week.
    foreach (Day days in week)
    {
        weeknum++;
        if (days != null)
        {
            txtOutput.Text += "Week " + weeknum + "         " + days.Monday + "          " + days.Tuesday + "         " + days.Wednesday + "          " + days.Thursday + "         " + days.Friday + "\r\n";
        }
    }
}

【问题讨论】:

  • 我不明白你的问题。 (找到索引?)你也没有任何多维数组。

标签: c# arrays search multidimensional-array inputbox


【解决方案1】:

“我要搜索索引并找到并显示值。”

抱歉,我可能没有回答您的问题,但这听起来像是 Dictionary 的完美用例。

IDictionary<string, int> database = new Dictionary<string, int>
{
    {"Week1 Monday", 10},
    {"Week1 Wednesday", 20}
};

var userinput = "Week1 Monday";
int numberOfBears;
database.TryGetValue(userinput, out numberOfBears);

//numberOfBears = 10

更多信息可以参考http://www.dotnetperls.com/dictionary

【讨论】:

  • 另外,您的示例可以通过使用TryGetValue 方法而不是ContainsKey 并返回项目来改进。在此处查看更多信息:stackoverflow.com/questions/9382681/…
  • @bashis 今天学到了一些东西。谢谢! :)
【解决方案2】:

您需要使用 Array.GetLowerBound 和 Array.GetUpperBound 方法遍历数组。 Array.IndexOf 和 A​​rray.FindIndex 方法不支持多维数组。

例如:

string[,,] data = new string[3,3,3];
data.SetValue("foo", 0, 1, 2 );

for (int i = data.GetLowerBound(0); i <= data.GetUpperBound(0); i++)
    for (int j = data.GetLowerBound(1); j <= data.GetUpperBound(1); j++)
        for (int k = data.GetLowerBound(2); k <= data.GetUpperBound(2); k++)
            Console.WriteLine("{0},{1},{2}: {3}", i, j, k, data[i,j,k]);
You might also find the Array.GetLength method and Array.Rank property useful. I recommend setting up a small multidimensional array and using all these methods and properties to get an idea of how they work.

【讨论】:

    【解决方案3】:

    没有像 Array.Find() 这样的多维数组的内置函数。

    您基本上有两个选择:创建自己的辅助方法并在那里实现通用搜索模式,或者生成与多维数组的内容相关的域对象列表。我个人倾向于选择后者。

    如果您选择编写辅助方法,它可能看起来(非常粗略)如下所示:

    //您可以轻松修改此代码以处理 3D 数组等。

    public static class ArrayHelper
    {
       public static object FindInDimensions(this object[,] target, 
       object searchTerm)
      {
        object result = null;
        var rowLowerLimit = target.GetLowerBound(0);
        var rowUpperLimit = target.GetUpperBound(0);
    
        var colLowerLimit = target.GetLowerBound(1);
        var colUpperLimit = target.GetUpperBound(1);
    
        for (int row = rowLowerLimit; row < rowUpperLimit; row++)
        {
            for (int col = colLowerLimit; col < colUpperLimit; col++)
            {
                // you could do the search here...
            }
        }
    
        return result;
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多