两个List对象之间的随机交换

时间:2018-05-23 03:29:36

标签: c#

我试图在两个列表对象之间进行随机交换。

到目前为止我得到了什么:

public class Inventory
{
    private List<Item> items = new List<Item>();
    public List<Item> Items { get; set; }

    public Inventory()
    {
        items = new List<Item>()
        {
            new Item("Ipod"),
            new Item("Samsung"),
            new Item("Motorolla"),
            new Item("Huawei")
        };
    }
}

Form_load

private void Form1_Load(object sender, EventArgs e)
{
    // Both objects are initiated with the default values from Inventory.cs
    var myInv = new Inventory();
    lstBox.Items.Add(myInv);

    var myInv2 = new Inventory();
    lstBox.Items.Add(myInv);
}

因此,一旦我启动了随机交换,myInv1中的随机对象将与myInv2交换,然后来自myInv2的一个对象将填充myInv1中的该位置}。

目前,这是我能描述我的挑战的最佳方式 如果有什么事情看起来很混乱,我会很乐意尽快发表评论。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用Random class

我清除了与原始问题完全无关的部分代码“如何在两个列表中随机交换两个项目?”之后,使用Random,我们随机选择每个列表中的项目并进行交换。

public void DoRandomSwap()
{
    var myInv1 = new Inventory();
    var myInv2 = new Inventory();

    Random rnd = new Random();
    int myInv1Random = rnd.Next(myInv1.Items.Count);
    int myInv2Random = rnd.Next(myInv2.Items.Count);

    Item tempItem1 = myInv1.Items[myInv1Random];
    Item tempItem2 = myInv2.Items[myInv2Random];

    myInv1.Items[myInv1Random] = tempItem2;
    myInv2.Items[myInv2Random] = tempItem1;
}

此外,我清理了您的Inventory课程,因为您似乎没有正确初始化您的列表:

public class Inventory
{
    public List<Item> Items { get; set; }

    public Inventory()
    {
        Items = new List<Item>()
        {
            new Item("Ipod"),
            new Item("Samsung"),
            new Item("Motorolla"),
            new Item("Huawei")
        };
    }
}

最后,您没有包含Item的代码,所以我根据您的使用方式添加了一个简单的版本:

public class Item
{
    public string itemName { get; set; }
    public Item(string itemName)
    {
        this.itemName = itemName;
    }
}

希望这有帮助!