4

重なり合う 2 つの線分のように、無限の交点を見つけることができます。これらすべてのポイントを列挙することは意味がないかもしれません。このコレクションが無限であることを提示したいだけかもしれません.

浮動小数点数にはNegativeInfinityと が定義されていPositiveInfinityます。カウントまたは数を表す数値は、浮動小数点数を使用する必要がないように見えますが、整数は無限を表すものとして定義されていません。

そこで、無限列挙可能を実装しようとしました。しかし、私は突然「列挙可能」という用語に混乱します..

この問題を解決するより良い方法はありますか? そして、無限列挙可能はまだ列挙可能ですか?

  • コード

    public partial class Infinity: IEnumerable<object> {
        IEnumerator<object> IEnumerable<object>.GetEnumerator() {
            for(; ; )
                yield return Infinity.Enumerable;
        }
    
        public IEnumerator GetEnumerator() {
            for(; ; )
                yield return Infinity.Enumerable;
        }
    
        public Infinity LongCount(
            Func<object, bool> predicate=default(Func<object, bool>)) {
            return Infinity.Enumerable;
        }
    
        public Infinity Count(
            Func<object, bool> predicate=default(Func<object, bool>)) {
            return Infinity.Enumerable;
        }
    
        public static readonly Infinity Enumerable=new Infinity();
    }
    

編集:

回答ありがとうございます。と混同していません。メソッドが返すのは、次のような余分なダミー オブジェクトを宣言したく ないためです。IEnumerableIEnumeratorGetEnumeratorInfinity.Enumerable

static readonly object dummy=new object();

メソッドでリターンを生成dummyGetEnumeratorます。

4

2 に答える 2

6

そして、無限列挙可能はまだ列挙可能ですか?

この意味で、Enumerableは enumerate の 2 番目の定義に基づいています。

次々と指定する

これは、(コンピューティング以外ではより一般的な) 定義に言及しているのではなく、事実上「数えられる」ことを意味します。

この意味で、無限シリーズは間違いなく次から次へとリストされる可能性があり、列挙可能としての資格があります。

そうは言っても、この例のコードの背後にある目的はわかりません。無限の列挙型は通常、終わりのないデータ ストリームや、「終わり」はないが継続的に情報を引き出す可能性があるその他のソースのようなものを表します。

于 2013-05-22T23:36:46.087 に答える
5

正の自然数は無限であり、明確に数えることができます (1、2、3、…)。この概念は、C# 以外でも明確に定義されています。

IEnumerableただし、 andIEnumeratorインターフェイスを混同しているため、クラスには問題があります。このGetEnumeratorメソッドは、列挙子を1 つだけ返します。それは無限です。

IEnumerableC# で (クラスではなくメソッドとして)無限を簡単に実装するには、次のようにします。

IEnumerable<int> Infinite() {
    int i = 1;
    while (true)
        yield return i++;
}

警告:intある時点でオーバーフローします。ただし、デフォルトでは、C# は単純に負の数にループ バックします。

于 2013-05-22T23:37:26.120 に答える