【问题标题】:How to split array in two arrays?如何将数组拆分为两个数组?
【发布时间】:2014-02-18 07:35:52
【问题描述】:

我有一个数组,想一分为二:

现在:    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

New_1: [0, 2, 4, 6, 8]

New_2: [1, 3, 5, 7, 9]

所以取一个元素并跳过下一个元素。 看起来很简单,但我怎么能用 C# 做到呢?

非常感谢

【问题讨论】:

    标签: c# arrays split


    【解决方案1】:

    您可以使用 linq,Enumerable.Where 并获取具有 even 和 odd 索引的元素的数组。

    var New_1 = arr.Where((c,i) => i % 2 == 0).ToArray();
    var New_2 = arr.Where((c,i) => i % 2 != 0).ToArray();
    

    您可以获取集合元素的索引并应用条件来检查索引是偶数还是奇数并根据该数组获取数组。

    Enumerable.Where Method (IEnumerable, Func) 根据谓词过滤一系列值。 每个元素的索引都用于谓词函数的逻辑中。 predicate 的第一个参数表示要测试的元素。这 第二个参数表示元素的从零开始的索引 来源,msdn

    【讨论】:

    • 别忘了.ToArray()
    • 但是他想要一个数组作为结果。 Where() 返回 IEnumerable
    • 谢谢@elmugrat,你真好。
    【解决方案2】:

    怎么样

    int[] arr = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int[] arr1 = arr.Where((x, i) => i % 2 == 0).ToArray();
    int[] arr2 = arr.Where((x, i) => i % 2 == 1).ToArray();
    

    【讨论】:

      【解决方案3】:
      int[] arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
      int i = 0;
      List<int[]> twoArr = arr.GroupBy(x => i++ % 2).Select(g => g.ToArray()).ToList();
      

      【讨论】:

      • 这行得通,但它不会给 OP 他想要的结果(两个数组)并且(IMO)比Where() 版本可读性差
      • @elmugrat 如果他想拆分为 10,您会手动创建 10 个数组。不,我不会发布 bad 答案。
      • 如果他没有说“一分为二”,我会同意你的看法,但既然他只想要两个,我认为提高可读性值得多加一行。 >
      猜你喜欢
      • 1970-01-01
      • 2012-04-13
      • 2015-05-17
      • 1970-01-01
      • 2011-08-16
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多