【问题标题】:does an list of lists smell bad, what are my other options清单清单闻起来很臭吗,我的其他选择是什么
【发布时间】:2011-03-20 13:58:57
【问题描述】:

我需要组合一个列表,但整个想法听起来不太漂亮。 只是听起来很麻烦。是否有其他模式来保存列表列表。

我的第一个方法是使用 Arraylist 的 arrayList。

c#, .net-2

更多:那么要存储的项目数量很少但总是在变化。

注意: 我在这个问题上使用 ArrayLists 得到了纠正:

What's wrong with using an ArrayList in .net-2.0

【问题讨论】:

标签: c# .net-2.0


【解决方案1】:

List<List<T>> 没有任何问题 - LINQ 的 SelectMany 在这种情况下可以成为你的朋友。

【讨论】:

  • 虽然评论有效(并获得 +1),但 LINQ 仅在 3.5 及更高版本中可用,但 OP 列出了 2.0。
  • 您可以在 .Net 2.0 中将 LinqBridge(或类似的)用于 Linq to Objects
【解决方案2】:

如何使用在自定义类中创建的对象?

例如,客户可以有多个地址。创建一个具有 Address 属性的 Customer 对象。然后,您可以拥有一个客户集合(数组、ArrayList 等),并且每个客户都可以拥有一个地址集合。

这适合多种信息,例如产品类别中的产品、部门中的员工。

这样处理层次关系在编码中更容易。

【讨论】:

    【解决方案3】:

    您可以,但最好将其包装到具有明确定义的公共方法的类中。

    【讨论】:

      【解决方案4】:

      完全没有问题。我已经使用过它,它非常适合我当时的需求。该模式是列表的列表。 :)

      【讨论】:

        【解决方案5】:

        列表本身并不是难闻的气味。如果您的列表都将具有相同的大小,您可能需要使用 2D 数组,例如int[2,2],但是如果列表的长度不同,那么列表列表是正确的方法,而不是为不规则的二维数组正式编码一个类。

        【讨论】:

        • 您也可以直接在 C# 中使用锯齿状数组 - 无需“正式为不规则二维数组编写类” - C# 中已经支持锯齿状数组。
        【解决方案6】:

        您当然可以使用泛型列表或非泛型变体 ArrayList。

        List<List<string>> listOfLists = new List<List<string>>();
        listOfLists.Add(new List<string>());
        listOfLists.Add(new List<string>());
        
        ArrayList stringListOfStringLists = new ArrayList();
        stringListOfStringLists.Add(new ArrayList());
        stringListOfStringLists.Add(new ArrayList());
        

        【讨论】:

        • -1 提到 ArrayList 是一个选项。经验法则,永远不要使用 ArrayList。
        • 为什么不呢? ArrayList 有什么问题?
        • @John Kugelman - 类型安全、装箱和拆箱成本,即性能
        • @tster,很公平。我建议使用 ArrayList 部分是因为他在问题中提到了它,但主要是因为在遗留代码中看到它是 .net 2.0 项目的可能性。我应该提到它不应该被使用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-10
        • 2021-10-06
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        相关资源
        最近更新 更多