C#如何在数组中搜索索引以查找值
本文关键字:索引 查找 搜索 数组 | 更新日期: 2023-09-27 18:23:37
我一直在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";
}
}
}
"我想搜索索引,找到并显示值。"
抱歉,我可能没有回答你的问题,但这听起来像是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
您需要使用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.
没有像array.Find().这样的多维数组内置函数
基本上有两种选择:创建自己的辅助方法并在那里实现通用搜索模式,或者生成与多维数组内容相关的域对象列表。我个人倾向于选择后一种选择。
如果你选择编写一个helper方法,它可能看起来(非常粗略)如下:
//你可以很容易地修改这个代码来处理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;
}
}