【问题标题】:How to copy value of two sub list into a single list in c#?如何将两个子列表的值复制到c#中的单个列表中?
【发布时间】:2016-02-24 05:33:02
【问题描述】:

我有一个列表集合

List<List<int>> FS=new List<List<int>>()

我已将值添加到每个列表中。现在我的FS 看起来像FS={{1,2,3},{5,7},{3}}。

如何将前两个子列表的值组合成一个新列表? 我需要像{1,2,3,5,7}

【问题讨论】:

  • 你已经尝试过什么?什么不起作用?
  • 你想合并前两个列表因为最后一个只有3的值,它已经在前两个列表中,或者不管是什么值,您只想要前两个列表?
  • two sub list into a single new list? 第三个呢?
  • 为什么你的例子有三个列表,但你只想合并前两个?这个问题非常令人困惑。
  • 不管值是多少,我只想要前两个列表或随机两个列表@Ian

标签: c# list ienumerable sublist


【解决方案1】:

如果FS 一直有 2 个或更多项目,请使用 List.AddRange():

FS[0].AddRange(FS[1]);

编辑

以上示例将编辑原始列表。如果您想要一个新列表,您应该创建一个新列表并使用 AddRange 为其添加值:

List<int> newList = new List<int>();
newList.AddRange(FS[0]);
newList.AddRange(FS[1]);

【讨论】:

  • 也许您还想补充一点,这个 FS[0].AddRange(FS[1]) 也必须分配给一个新列表以避免出现 {{1,2,3,5,7 },{5,7},{3}} 在原来的 List 中。
  • 谢谢@Ian 你是对的。用新的细节更新了我的答案。
【解决方案2】:

同时使用GetRange 和SelectMany:

FS = FS.GetRange(0, 2).SelectMany(x => x).ToList();

GetRange 是从List 中获取N(在您的情况下为N = 2)的元素数量。

{{1,2,3},{5,7},{3}} => {{1,2,3},{5,7}}

SelectMany 用于将List&lt;List&lt;int&gt;&gt; 扁平化为List&lt;int&gt;。

{{1,2,3},{5,7}} => {1,2,3,5,7}

【讨论】:

  • @AlexJolig 你是对的。我更新了我的答案。而且我认为你的答案,只要元素的数量是两个或更多,也可以。
  • 是的。我删除了评论。不管怎样,你是个聪明人,因为我第一次看到你有 2k 的声望,我尊重你 :)
  • @AlexJolig 我最初认为 OP 不想获得第三个列表,因为他已经拥有其中的值(即 3),因此我建议 Distinct,但我似乎是在我与 OP 确认后出错。
  • @AlexJolig 哦,我刚加入 SO 几个月。所以它一定在那个时候......而且,很高兴见到你! :) 虽然我以前见过你几次 - 主要是在你快速编辑新帖子时 - 这可能是我们第一次像这样交换我们的 cmets。所以,很高兴认识你。 :)
  • 现在我看了你的回答,比我的要好得多。另外,我对您在短短两个月内取得的成就感到惊讶!!!也许你的下一个约翰斯基特!
【解决方案3】:

由于您要合并前两个Lists,您可以使用Take 来获取前两个集合,然后您可以使用SelectMany 来线性集合集合。

FS.Take(2).SelectMany(e=>e);

要消除重复使用Distinct

FS.Take(2).SelectMany(e=>e).Distinct();

工作Demo

【讨论】:

    【解决方案4】:

    如果您想合并所有三个列表并仅选择不同的项目,您可以使用 distinct 进行联合。

     FS.SelectMany(list => list).Distinct();
    

    如果您只想合并前两个列表。那么您必须仅过滤两个项目或选择列表中的前 2 个项目,然后进行联合。

    FS.Take(2).SelectMany(list => list).Distinct();
    

    【讨论】:

      【解决方案5】:

      您需要在 List 中使用 'AddRange' 方法

      List<int> combinedList = new List<int>(FS[0]);
      combinedList.AddRange(FS[1]);
      

      【讨论】:

        猜你喜欢
        • 2016-02-28
        • 2020-02-11
        • 2020-01-13
        • 1970-01-01
        • 2019-01-26
        • 2015-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多