【问题标题】:ArrayList changing after sorting function排序功能后ArrayList发生变化
【发布时间】:2012-01-18 03:13:18
【问题描述】:

我刚刚开始在一些 C# 代码中使用 ArrayLists,但在排序时遇到了一些问题。

首先我定义在我的类下创建一个 ArrayList 对象:

ArrayList cutList = new ArrayList;

然后我设置并排序数组列表以找到最小值:

cutList.Add("2200","1800","1200","1");
int minList = (int)GetMinValue(cutList);

使用函数:

public static object GetMinValue(ArrayList arrList)
{
ArrayList sortArrayList = arrList;
sortArrayList.Sort();
return sortArrayList[0];
}

稍后我尝试查找索引 cutList[2] 并找到“1200”,因为该函数还对 cutList 进行了排序。过去我也遇到过同样的问题,当我将变量设置为应用程序设置,然后当我修改变量时应用程序设置发生变化。如何正确解决这些问题。我一直在自学 C#,并且对跳过一点点感到内疚。有关于我错过的对象的课程吗?

【问题讨论】:

    标签: object arraylist


    【解决方案1】:

    您的代码中的问题是ArrayList sortArrayList = arrList; 没有将arrList 复制到sortArrayList:分配只是为现有对象创建一个新别名。要使您的代码正常工作,请使用

    ArrayList sortArrayList = (ArrayList)arrList.Clone();
    

    我必须补充一点,这可能是在列表中查找 min 元素的最低效的方法,也是一种相当陈旧的容器。我更喜欢使用List<string> 而不是ArrayList,并使用LINQ 的Min() 函数来获取最小元素。

    【讨论】:

    • 我做了更多的研究,发现了一些讨论“通过引用”的消息来源。那么 Clone() 函数是否允许创建它自己的内存位置,而不是指向同一个内存“引用”,当 cutList 或 arrList 发生变化时它会发生变化?我在工作中使用 ArrayList 的原因是希望能够了解更多关于 ArrayList 的信息。看起来我的教训是我不应该使用它们进行排序以找到最小/最大值.....
    • Clone() 创建一个独立于其原始副本的副本。您可以对副本进行排序、向其中添加元素或将其清除 - 原件不会发生任何事情。当然,对原件的更改也不会反映在副本中。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2010-09-19
    • 2017-12-11
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多