2011-04-12 56 views
0

嗨 我在asp.net c#中创建在线测验。为此,我有一个窗体在下拉列表&开始按钮中显示测试列表。出现单击第二个表单后,第二个表单显示问题的一个标签,答案的单选按钮列表,然后选择&复选框进行审阅。我在1stform的开始按钮单击事件中创建一个随机问题ID的数组。当我点击第二种形式的下一个按钮,然后出现下一个随机问题,我想要检查这些问题的检查数组。我用于值(eg.10101)阵列码1代表真& 0表示否如下,但我想这个问题的阵列IDS那些被检查:关于检索数组内的值

 int[] a = (int[])Session["values"];//this is array of random question ids created in 1st form 
     int g; 
     if (chkmark.Checked == true) 
     { 
      g = 1; 
     } 
     else 
     { 
      g = 0; 
     } 
     int[] chkarray = new int[Convert.ToInt32(Session["Counter"]) - 1]; 
     int[] temp1 = (int[])Session["arrofchk"]; 
     int k, no; 

     if (temp1 == null) 
      no = 0; 
     else 
      no = temp.Length; 
     for (k = 0; k < no; k++) 
     { 
     chkarray[k] = temp1[k]; 
     } 
     chkarray[j] = g; 
+3

为了善良,请使用将来有意义的变量名称。所以你想要在它旁边的数组中获得针对每个测验问题进行检查的答案? – 2011-04-12 07:45:45

+0

是的,我想显示已检查过的问题ID数组 – Ishika 2011-04-12 08:22:41

+0

请参阅下面的可能解决方案 – 2011-04-12 08:23:57

回答

0

就个人而言,我会用此一Dictionary<int, bool>

在字典的key中,您可以存储随机问题ID,在该对的value中,可以存储选中的项目状态。现在可能需要更多的工作来重构它,但是我相信,如果您希望对测验项目执行更多操作,最终可以节省大量时间。

使用字典 - 或者至少是精心挑选的集合,我认为找回正确的数据会更容易。

对于您的示例,如果两个数组的位置相同,则它只能工作

Dictionary<int, bool> quizAnswers = new Dictionary<int, bool>(); // <questionID, checked> 

// Fill dictionary with questions and answers 
for(int i=0;i<a.length;i++) 
{ 
    if(temp1.length > i) // Make sure we don't get an IndexOutOfBoundsException 
    { 
    quizAnswers.Add(a[i], temp1[i] == 1); 
    } 
} 

// Get Answered question in array (LINQ) 
int[] checkedAnswers = (from KeyValuePair<int, bool> pair in quizAnswers 
         where pair.Value == true 
         select pair.Key).ToArray<int>(); 

我在这里使用字典的原因是因为我个人认为它比拥有两个单独的数组更加整齐。

我相信你应该在你的测验中实现一个字典,而不是那些数组。如果数组索引不匹配,或者您想动态地将问题添加到固定大小的数组等等,该怎么办?

这是要考虑的事情。希望我能帮助你。