【问题标题】:How To Store Mixed Array Data?如何存储混合数组数据?
【发布时间】:2011-04-09 09:14:10
【问题描述】:

假设我有一个数组,我需要存储字符串值和双精度值。我知道我可以将双精度数存储为字符串,并且只处理转换,但是可以使用具有两种数据类型的数组吗?

【问题讨论】:

  • 性能有多重要?如果是这样,我可以尝试编写一个自定义类,分别存储它们但将它们作为一个公开。
  • 如何检测你拔出的是双排还是字符串。它们总是按相同的顺序排列吗?

标签: c# arrays types


【解决方案1】:

不是最有效的用法,但灵活性如何:

var a = new object[] {1,2,3,"paul",5.5}

甚至

var a = new object[] {1,2,3,"paul",5.5, new List<string>() {"apple","banana","pear"}  }

【讨论】:

    【解决方案2】:

    您可以使用object[] 并进行一些类型检查。访问双打时你会得到一些装箱/拆箱,但无论如何这都会比double.Parse() 快。

    另一种方法是创建一个具有类型和标记的类:

    class StringOrDouble
    {
        private double d;
        private string s;
        private bool isString;
    
        StringOrDouble(double d)
        {
            this.d = d;
            isString = false;
        }
    
        StringOrDouble(string s)
        {
            this.s = s;
            isString = true;
        }
    
        double D
        {
            get
            {
                if (isString)
                    throw new InvalidOperationException("this is a string");
                return d;
            }
        }
    
        string S
        {
            get
            {
                if (!isString)
                    throw new InvalidOperationException("this is a double");
                return s;
            }
        }
        bool IsString { get { return isString; } }
    }
    

    然后创建一个 StringOrDouble 数组。这将使您免于进行一些类型检查和装箱,但会产生更大的内存开销。

    【讨论】:

    • ^ 是你在这里描述的结构吗?
    【解决方案3】:

    object[]ArrayList 是两个不错的选择;这取决于您是否需要传统的固定长度数组或向量(可变长度数组)。此外,如果字符串和双精度是您可以处理的唯一事情,并且您需要能够将它们作为字符串和双精度取出,我会将其中一个“包装”在一个自定义类中,该类进行一些类型检查。

    【讨论】:

      【解决方案4】:

      确定使用:

      object[], ArrayList, or List<Object>;
      

      您必须施放,并且可能会为双打支付拳击罚金,但它们将允许您存储两种不同的类型。

      【讨论】:

      • 您会推荐哪种方式以获得最大效率?我正在处理 50k 元素大小的数组。
      • @Soo - 是否总是 50k 个元素,是否总是填充 50k 个元素?
      • 我认为,如果您需要调整数组的大小,arraylist 或 List 会更好。如果不需要调整大小,则只需使用 object[],因为这比 List 或 ArrayList 更适合快速查找。
      • 50k...这三个在存储方面几乎做同样的事情,但老实说,我可能会重新考虑使用数组并尝试使用几个更小的结构。
      • Array 通常是最快的,因为它没有 ArrayList 和 List 的可变长度开销。
      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多