C#如何在ListBox中使用HashSet值?

C#如何在ListBox中使用HashSet值?,c#,listbox,hashset,C#,Listbox,Hashset,我目前在为m.U.G.E.N.担任一名锦标赛经理。它从SQLServer数据表中读取数据,并将行存储在列表框中。它还应该从中随机挑选16架战斗机 我已经在while循环中创建了一个随机生成器和一个散列集,以防止任何重复,所以这个过程只有在挑选了16架战斗机后才会停止。这是我到目前为止写的: private void buttonRandom_Click(object sender, EventArgs e) /* * Randomly pick 16 fight

我目前在为m.U.G.E.N.担任一名锦标赛经理。它从SQLServer数据表中读取数据,并将行存储在列表框中。它还应该从中随机挑选16架战斗机

我已经在while循环中创建了一个随机生成器和一个散列集,以防止任何重复,所以这个过程只有在挑选了16架战斗机后才会停止。这是我到目前为止写的:

private void buttonRandom_Click(object sender, EventArgs e)
        /*
         * Randomly pick 16 fighters from the "Registered" ListBox
         * Only unique IDs are allowed
         */
    {
        Random contestantPicker = new Random();
        HashSet<int> fighters = new HashSet<int>();
        while (fighters.Count < 16) // Run Random until 16 fighters have been picked
        {
            fighters.Add(contestantPicker.Next(0, listBoxRegistered.Items.Count));
        }
    }
private void按钮随机单击(对象发送者,事件参数e)
/*
*从“注册”列表框中随机选择16架战斗机
*只允许使用唯一的ID
*/
{
随机选取器=新随机();
HashSet=newhashset();
while(fighters.Count<16)//随机运行,直到选择了16架战斗机
{
Add(竞争者选取器.Next(0,listBoxRegistered.Items.Count));
}
}

现在的问题是:如何使用存储在哈希集中的数字将具有相应索引的项从一个列表框复制到另一个列表框?

在生成
哈希集后,遍历该哈希集,并按其索引查找相应项

像这样:

//old code
Random contestantPicker = new Random();
HashSet<int> fighters = new HashSet<int>();
while (fighters.Count < 16) // Run Random until 16 fighters have been picked
{
    fighters.Add(contestantPicker.Next(0, listBoxRegistered.Items.Count));
}

//list to hold fighter names
List<string> fightersList = new List<string>();

//iterate through all indexes in hashset
for (int i = 0; i < fighters.Count; i++)
{
    //show in output window
    Diagnostics.Debug.WriteLine("figther number {0}, named: {1}", i + 1, listBoxRegistered.GetItemText(listBoxRegistered.Items[fighters.ElementAt(i)]));

    //add fighters to list...
    fightersList.Add(listBoxRegistered.GetItemText(listBoxRegistered.Items[fighters.ElementAt(i)]));
}

//... and show it in some message box
MessageBox.Show(string.Join(", ", fightersList.ToArray()));
//旧代码
随机选取器=新随机();
HashSet=newhashset();
while(fighters.Count<16)//随机运行,直到选择了16架战斗机
{
Add(竞争者选取器.Next(0,listBoxRegistered.Items.Count));
}
//保存战斗机名称的列表
List fightersList=新列表();
//遍历hashset中的所有索引
for(int i=0;i
OK,在for循环之后,我将列表更改为一个数组,它用foreach显示项目。但它只显示System.Data.DataRowView。即使在我使用ListBox.GetItemText(ListBox.Items)时,它也只显示无用的信息。它只显示我认为是System.Windows.Forms的每行一个字母。我已经编辑了我的代码。。。现在,我将
ListBoxItem
中的
GetItemText
与索引I一起使用。现在试试吧。战士的名字现在显示在列表框中,但是现在我发现Random不能正常工作。按下按钮后,仅按顺序显示前16个字符。我需要这个列表是完全随机的。@ChaosSpindash ooops,我的错。随机工作,并且集合包含listbox中项目的未排序索引(数字从0到15;例如:6,3,11,8,0,1..)获取名称时出错。我是通过项目的索引来访问项目,而不是从figters
HashSet
获取索引。现在,它应该像预期的那样工作。