如何将一个数组一分为二?
How to divide an array into two?
我是 C# 的初学者。我想在纸牌游戏中将等量的纸牌发给 2 名玩家。我必须将我的数组(纸牌)分成两部分,以便每个玩家都拥有相同数量的纸牌。我已经使用 my GetImages()
将所有(全部 40 张)图像随机化为 1 pictureBox
。所以接下来我必须将它分成两部分,并在我的表单加载时将它们放入 pictureBox
中。
非常感谢任何帮助,谢谢。
这是我的代码:
public string[] GetImages(){
string[] img = new string[40];
img[0] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[1] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[2] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[3] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[4] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[5] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[6] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[7] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[8] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[9] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[10] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[11] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[12] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[13] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
//so on and so forth
return
img;
}
public void Form2_Load(object sender, EventArgs e)
{
//the code I'm trying now:
string[] Player1Array = GetImages(40/2);
假设您只需要将一个数组(或 List
)的元素分成 first/second 一半——如果需要,通常会使用 Enumerable.Take
/Enumerable.Skip
followed by Enumerable.ToArray
转换为数组:
string[] Player1Array = GetImages().Take(20).ToArray();
string[] Player2Array = GetImages().Skip(20).ToArray();
首先,您必须认识到代码中的一个问题:您不能使用带参数的 getImages 函数(我指的是 40/2),因为它没有定义参数。
我对随机化卡片有不同的建议。
将两个数组传递给 getImg 函数,该函数会将卡片随机分配给玩家 1。然后根据包含0-39随机排列的数字的数组随机到player2。 link 将帮助您了解如何生成一组随机的唯一数字(它使用列表,但您可以安全地将其替换为数组):
https://codereview.stackexchange.com/questions/61338/generate-random-numbers-without-repetitions
所以 getImg 函数将是这样的:
public string [] GetImages(string [] player1Array, string [] player2Array){
int [] randomArray=getRandomNembers(); //this call depends on how you define the function
player1Array[randomArray[0]]=" your location here";
// so on until
player1Array[randomArray[19]]=" your location here";
//then you start with player 2
player2Array[randomArray[20]]=" your location here";
//and so on
}
阿列克谢死定了。如果我们想变得更复杂,你可以这样做:
public static List<string[]> Partition(this string[] source, Int32 size)
{
var output = new List<string[]>();
for (int i = 0; i < Math.Ceiling(source.Count() / (Double)size); i++)
output.Add(source.Skip(size * i).Take(size).ToArray());
return output;
}
灵感来自于此C# - elegant way of partitioning a list?
所以要使用它,您所要做的就是:
var chunkSize = 40 / 4;
var chunks = GetImages().GetImages(chunkSize);
块中的每个元素都是原始片段。每个块中有多少个字符串取决于块大小的参数。 40/4 会给你 4 个块。第一项包含前 10 个。第二个包含接下来的 10 个,依此类推直到最后 10 个。这样您就可以根据需要轻松地对数组进行分段。
我是 C# 的初学者。我想在纸牌游戏中将等量的纸牌发给 2 名玩家。我必须将我的数组(纸牌)分成两部分,以便每个玩家都拥有相同数量的纸牌。我已经使用 my GetImages()
将所有(全部 40 张)图像随机化为 1 pictureBox
。所以接下来我必须将它分成两部分,并在我的表单加载时将它们放入 pictureBox
中。
非常感谢任何帮助,谢谢。
这是我的代码:
public string[] GetImages(){
string[] img = new string[40];
img[0] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[1] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[2] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[3] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[4] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[5] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[6] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[7] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[8] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[9] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[10] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[11] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[12] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
img[13] = @"C:\Users\Student\Documents\APPD\Asgmt\Asgmt\Assignment\Assignment\handcards.png";
//so on and so forth
return
img;
}
public void Form2_Load(object sender, EventArgs e)
{
//the code I'm trying now:
string[] Player1Array = GetImages(40/2);
假设您只需要将一个数组(或 List
)的元素分成 first/second 一半——如果需要,通常会使用 Enumerable.Take
/Enumerable.Skip
followed by Enumerable.ToArray
转换为数组:
string[] Player1Array = GetImages().Take(20).ToArray();
string[] Player2Array = GetImages().Skip(20).ToArray();
首先,您必须认识到代码中的一个问题:您不能使用带参数的 getImages 函数(我指的是 40/2),因为它没有定义参数。
我对随机化卡片有不同的建议。 将两个数组传递给 getImg 函数,该函数会将卡片随机分配给玩家 1。然后根据包含0-39随机排列的数字的数组随机到player2。 link 将帮助您了解如何生成一组随机的唯一数字(它使用列表,但您可以安全地将其替换为数组):
https://codereview.stackexchange.com/questions/61338/generate-random-numbers-without-repetitions
所以 getImg 函数将是这样的:
public string [] GetImages(string [] player1Array, string [] player2Array){
int [] randomArray=getRandomNembers(); //this call depends on how you define the function
player1Array[randomArray[0]]=" your location here";
// so on until
player1Array[randomArray[19]]=" your location here";
//then you start with player 2
player2Array[randomArray[20]]=" your location here";
//and so on
}
阿列克谢死定了。如果我们想变得更复杂,你可以这样做:
public static List<string[]> Partition(this string[] source, Int32 size)
{
var output = new List<string[]>();
for (int i = 0; i < Math.Ceiling(source.Count() / (Double)size); i++)
output.Add(source.Skip(size * i).Take(size).ToArray());
return output;
}
灵感来自于此C# - elegant way of partitioning a list?
所以要使用它,您所要做的就是:
var chunkSize = 40 / 4;
var chunks = GetImages().GetImages(chunkSize);
块中的每个元素都是原始片段。每个块中有多少个字符串取决于块大小的参数。 40/4 会给你 4 个块。第一项包含前 10 个。第二个包含接下来的 10 个,依此类推直到最后 10 个。这样您就可以根据需要轻松地对数组进行分段。