将一维数组的索引转换为二维数组,即行和列
本文关键字:二维数组 一维数组 索引 转换 | 更新日期: 2023-09-27 18:15:36
我有一个WinForms
的应用程序,在列表框中我插入名称和价格..名称和价格分别存储在二维数组中。现在,当我从listbox
中选择一条记录时,它只给我一个索引,我可以从中获得字符串名称和价格来更新该记录,我必须在该索引处更改名称和价格,为此我想要更新二维数组名称和价格。但是所选择的索引只是一维的。我想把这个下标转换成行和列。怎么做呢?
但是我像这样在列表框中插入记录。
int row = 6, column = 10;
for(int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
value= row+" 't "+ column +" 't "+ name[i, j]+" 't " +price[i, j];
listbox.items.add(value);
}
}
虽然我不完全理解确切的场景,但在1D和2D坐标之间转换的常用方法是:
从2D到1D:
index = x + (y * width)
或
index = y + (x * height)
取决于你是从左到右还是从上到下阅读
从1D到2D:
x = index % width
y = index / width
或
x = index / height
y = index % height
试试这个,
int i = OneDimensionIndex%NbColumn
int j = OneDimensionIndex/NbRow //Care here you have to take the integer part
嗯,如果我理解正确的话,在您的情况下,显然ListBox
条目的数组条目的索引是ListBox
中的索引。然后,name和price分别位于该数组元素的索引0
和索引1
处。
的例子:
string[][] namesAndPrices = ...;
// To fill the list with entries like "Name: 123.45"
foreach (string[] nameAndPrice in namesAndPrices)
listBox1.Items.Add(String.Format("{0}: {1}", nameAndPrice[0], nameAndPrice[1]));
// To get the array and the name and price, it's enough to use the index
string[] selectedArray = namesAndPrices[listBox1.SelectedIndex];
string theName = selectedArray[0];
string thePrice = selectedArray[1];
如果你有一个这样的数组:
string[] namesAndPrices = new string[] { "Hello", "123", "World", "234" };
事情不同了。在这种情况下,索引是
int indexOfName = listBox1.SelectedIndex * 2;
int indexOfPrice = listBox1.SelectedIndex * 2 + 1;