如何从2D数组中选择一个随机位置?

时间:2015-10-12 11:49:36

标签: c# random multidimensional-array

我目前正在开发一款控制台问答游戏,为此,我需要从2D数组中随机选择随机问题。但我不确定如何从2D阵列中随机选择。

我无法显示我的完整数组,因为它们非常大 - 下面是修剪版本:

string[,] mineKategorier = new string[10, 6]
{
    {"C#","Question one here", "Question two here", "Question three here"},
    {"Spil engines", "Question one here", "Question two here", "Question three here"},
    {"Sport", "Question one here", "Question two here", "Question three here"},
};

4 个答案:

答案 0 :(得分:4)

Random rnd = new Random();
int row = rnd.Next(mineKategorier.GetLength(0));
int column = rnd.Next(mineKategorier.GetLength(1));

string randomKategori = mineKategorier[row, column];

答案 1 :(得分:1)

在您的应用程序中只有一个Random对象是个好主意。您可以通过执行以下操作来实例化Random对象:

Random random = new Random();

您可以使用此对象生成随机问题,如下所示:

int categoryNumber = random.Next(mineKategorier.GetLength(0));
int questionNumber = random.Next(1, mineKategorier.GetLength(1));
string category = mineKategorier[categoryNumber, 0];
string question = mineKategorier[categoryNumber, questionNumber];

我在第二行使用了1,因为您使用每行的第一个条目作为该类别的名称。

答案 2 :(得分:0)

您要做的是生成一个介于0和数组长度之间的随机数。

var random = new Random();
var randomYIndex = random.Next(0, mineKategorier.GetLength(0));
var randomXIndex = random.Next(0, mineKategorier.GetLength(1));
var randomQuestion = mineKategorier[randomYIndex, randomXIndex];

这将创建一个新的Random,当你调用Random.Next时,你说我想要一个介于0和数组长度之间的值(但不是数组长度的值)。因此,如果您的数组长度为10,则随机将生成0到9之间的值,然后您可以使用该值索引到问题数组。

GetLength的调用将获得数组中每个索引的数组长度,因此GetLength(0)将返回10,GetLength(1)将在您的实例中返回6。

答案 3 :(得分:-1)

Random r1 = new Random();
Random r2 = new Random();

int column = r1.Next(0, 10);//here 10 is for first length
int row = r2.Next(0,6)// here 6 for 2nd length. you can use variable here also.

//now  just pick from mineKategorier[,];
var value = mineKategorier[column,row];