将一维数组的索引转换为二维数组 i。 e.行列
Posted
技术标签:
【中文标题】将一维数组的索引转换为二维数组 i。 e.行列【英文标题】:Converting index of one dimensional array into two dimensional array i. e. row and column 【发布时间】:2013-05-23 08:06:26 【问题描述】:我有一个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);
【问题讨论】:
你可能应该发布一些代码...... 【参考方案1】:虽然我没有完全理解确切的场景,但在 1D 和 2D 坐标之间转换的常用方法是:
从二维到一维:
index = x + (y * width)
或
index = y + (x * height)
取决于你是从左到右还是从上到下阅读。
从一维到二维:
x = index % width
y = index / width
或
x = index / height
y = index % height
【讨论】:
多维数组怎么做?【参考方案2】:用于将 1D 索引转换为 3D 索引和从 3D 索引转换:
(int, int, int) OneToThree(i, dx, dy int)
z = i / (dx * dy)
i = i % (dx * dy)
y = i / dx
x = i % dx
return x, y, z
int ThreeToOne(x, y, z, dx, dy int)
return x + y*dx + z*dx*dy
【讨论】:
【参考方案3】:试试这个,
int i = OneDimensionIndex%NbColumn
int j = OneDimensionIndex/NbRow //Care here you have to take the integer part
【讨论】:
如果源数组包含像name price name price ...
这样的序列,这是正确的。然而,这不是一个真正的二维数组。【参考方案4】:
好吧,如果我理解正确的话,在你的情况下,显然ListBox
条目的数组条目的索引是ListBox
中的索引。然后名称和价格位于该数组元素的索引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;
【讨论】:
如何更改问题添加源代码的相关部分?这不是要在 cmets 中发布的内容。以上是关于将一维数组的索引转换为二维数组 i。 e.行列的主要内容,如果未能解决你的问题,请参考以下文章