C# - リストを2つに分割、n個に分割する

1つのリストを2つのリストに分割するか、n個のリストに分割する方法を紹介します。

1. GetRange() でリストを分離する

List.GetRange(index, count) は、リストの Index から count 個数だけ要素を取得して新しいリストに返します。

以下のように、1つのリストを2つのリストに分割できます。

  • GetRange(0, 3) : Index 0から3つの要素をリストに返す
  • GetRange(3, 4) : Index 3で4つの要素をリストに返す
using System;

namespace Example {

    public class Program {

        public static void Main(string[] args) {

            List<string> list = new List<string>() {"a", "b", "c", "d", "e", "f", "g"};


            List<string> splitList1 = list.GetRange(0, 3);
            List<string> splitList2 = list.GetRange(3, 4);

            Console.WriteLine(string.Join(", ", splitList1));
            Console.WriteLine(string.Join(", ", splitList2));
        }
    }
}

Output:

a, b, c
d, e, f, g

2. GetRange()でn個のリストに分割する

以下の例で直接実装した SplitList(list, size) 関数は、 list の要素を size 個数で割った新しいリストを返します。

たとえば、次のように長さが7のリストを2つずつ分割すると、長さが2のリストが3つ作成され、長さが1のリストが1つ作成されます。

using System;

namespace Example {

    public class Program {

        public static List<List<string>> SplitList(List<string> list, int size) {
            List<List<string>> result = new List<List<string>>();
            for (int i = 0; i < list.Count; i += size) {
                result.Add(list.GetRange(i, Math.Min(size, list.Count - i)));
            }
            return result;
        }

        public static void Main(string[] args) {

            List<string> list = new List<string>() {"a", "b", "c", "d", "e", "f", "g"};

            List<List<string>> result = SplitList(list, 2);

            // show results
            for (int i = 0; i < result.Count; i++) {
                List<string> splitList = result.ElementAt(i);
                Console.WriteLine(string.Join(", ", splitList));
            }
        }
    }
}

Output:

a, b
c, d
e, f
g
codechachaCopyright ©2019 codechacha