2015-11-20 143 views
-1

我一直在C#中徘徊,我目前做得很好,但我試圖找出如何在多維數組中搜索索引。我有一個陣列,用於每天製作的產品。這通過詢問用戶輸入(使用輸入框)​​例如顯示每週製作的產品。第1周星期一= 10熊,星期三= 20熊。第2周星期二= 30,星期五= 11等。我知道IndexOf,但是這是爲了找到給定值的索引。我想搜索索引並查找並顯示值。C#如何搜索數組中的索引以找到值

的代碼如下:

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"; 
     } 
    } 
} 
+2

我不明白你的問題。 (找到索引?),你也沒有任何多維數組。 –

回答

0

你會通過使用Array.GetLowerBound和Array.GetUpperBound方法陣列需要循環。 Array.IndexOf和Array.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. 
0

有像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; 
} 

}

2

「我想搜索索引並查找並顯示值。」

對不起,我可能不會回答你的問題,但這聽起來像是一個完美的詞典使用案例。

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

+2

此外,您的示例可以通過使用'TryGetValue'方法而不是'ContainsKey'並返回該項目來改進。在這裏看到更多:https://stackoverflow.com/questions/9382681/what-is-more-efficient-dictionary-trygetvalue-or-containskeyitem – bashis

+0

@bashis今天學到了一些東西。謝謝! :) – interceptwind