元記事:こんなのもあっていいかなーと
個人的には,initialに対しての拡張メソッドにしたいかな,というわけで作ってみました。
using System;
using System.Collections.Generic;
namespace Yuo.Extensions
{
public static class SystemExtensions
{
// 初項:initial 公差:stride の等差数列
public static IEnumerable<int> MySequence (this int initial, int stride)
{
for (; ; )
{
yield return initial;
initial += stride;
}
}
// initialから1刻み
public static IEnumerable<int> MySequence (this int initial)
{
return initial.MySequence(1);
}
}
}
項数はTake 拡張メソッドに丸投げしたので,引数が減っています。
また0からcount - 1までは,Enumerable.Range メソッドでできるので作っていません。
比較用。
using System;
using System.Collections.Generic;
using System.Linq;
using Wankuma.Extensions;
using Yuo.Extensions;
public class Program
{
public static void Main ()
{
// 初項2, 公差3 で 5つ。
var seq = 5.Sequence(2, 3);
var seq2 = 2.MySequence(3).Take(5);
Console.WriteLine(seq.SequenceEqual(seq2)); // 比較
// 要素数10コ、ぜんぶ-1で埋める
var array = new List(10.Sequence(-1, 0));
var array2 = new List((-1).MySequence(0).Take(10));
Console.WriteLine(array.SequenceEqual(array2)); // 比較
}
}
結果
True
True
最近のコメント