■
久しぶり。コンビネーションのクラスが必要だったので作ってみた。
using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace Combinations { public class Combinations<T> : IEnumerable<IEnumerable<T>> { private T[] _source; private int _subsetLength; public Combinations(IList<T> source, int subsetLength) { _source = source.ToArray(); _subsetLength = subsetLength; } public IEnumerator<IEnumerable<T>> GetEnumerator() { int[] indices = Enumerable.Range(0, _subsetLength).ToArray(); int lastTopIndex = _source.Length - _subsetLength; for (; ; ) { yield return indices.Select(i => _source[i]); for (int i = _subsetLength - 1; ; i--) { if (i < 0) yield break; if (indices[i] < lastTopIndex + i) { indices[i]++; for (int j = i + 1; j < _subsetLength; j++) { indices[j] = indices[j - 1] + 1; } break; } } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } public static class Program { static void Main(string[] args) { string[] values = { "竜", "虎", "兎", "燕", "鯉", "星" }; Combinations<string> c = new Combinations<string>(values, 2); foreach (IEnumerable<string> it in c) { Console.WriteLine(String.Join(",", it)); } Console.ReadKey(); } } }