【问题标题】:Struggling with the usage of List and ArrayList挣扎于 List 和 ArrayList 的使用
【发布时间】:2012-06-21 17:26:16
【问题描述】:

我正在尝试使用以下代码对ArrayList-questionsAndSeperators 的元素进行混洗。我有两种方法。
方法 1:-

List<Question> questionList = this.questionsAndSeperators.Cast<Question>().ToList();

Random rng = new Random();
int questionCount = questionList.Count;
while (questionCount > 1)
{
   questionCount--;
   int index = rng.Next(questionCount + 1);
   Question value = questionList[index];
   questionList[index] = questionList[questionCount];
   questionList[questionCount] = value;
}

方法二:-

ArrayList questionList = this.questionsAndSeperators;

Random rng = new Random();
int questionCount = questionList.Count;
while (questionCount > 1)
{
   questionCount--;
   int index = rng.Next(questionCount + 1);
   object value = questionList[index];
   questionList[index] = questionList[questionCount];
   questionList[questionCount] = value;
}

这里Question 是一个类。
方法 2 工作正常,并且对 questionsAndSeperators 的元素进行了混杂,但 方法 1 无法混杂questionsAndSeperators 的元素。 方法1有什么问题?? 我在方法 1 中做错了吗?

【问题讨论】:

    标签: c# list arraylist


    【解决方案1】:

    在方法 1 中,您使用 this.questionsAndSeperators 的所有元素创建一个 new List&lt;Question&gt;。 然后你洗牌new List&lt;Question&gt; 的所有元素。但是您不要打乱 this.questionsAndSeperators 的元素,因为它是另一个数组。

    在方法 2 中,您直接访问 ArrayList,然后将 ArrayList 的元素打乱。

    【讨论】:

    • 不不,在方法 2 中,我正在对 questionListquestionandseparators 的元素感到困惑!
    • 在方法2中questionListquestionandseparators是同一个对象,而方法1又不一样
    • @Jaguar 这就是他的意思;通过说questionList = this.questionsAndSeperators,你让它们引用相同的object,在前面的方法中,元素被复制到一个新的object中,所以洗牌只发生在新的object中。
    【解决方案2】:

    在版本一中,您被分配给一个名为“list”的变量,但随后您正在一个名为“questionList”的变量中进行改组。我想知道这是否可以编译。

    【讨论】:

    • 对不起,我写错了list。它是方法1中的questionList。已编辑
    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2023-04-06
    • 2014-08-30
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2015-08-24
    • 2021-08-05
    相关资源
    最近更新 更多