1

要素が配列内にあるかどうかを確認したり、特定の要素の出現回数を数えたりするにはどうすればよいですか?

私はそれを自分でハックできることを知っています:

int main()
{
  int [] a = [1,2,3,4,3,4,5,6,6,3,3,3];
  assert(count(a,6) == 2);
  assert(contains(a,7) == false);
  return 0;
}

uint count(T)(T[] a, T t){
  uint cnt = 0;
  foreach(elem; a){
    if(elem == t) ++cnt;
  }
  return cnt;
}

bool contains(T)(T[] a, T t){
  foreach(elem; a){
    if(elem == t) return true;
  }
  return false;
}

しかし、それを行うための「ライブラリの方法」が必要です!

編集: std.algorithmcanFind()と mycontains()を比較したところ、そのcontains方が高速であることがわかりました。奇妙ですが本当です。

4

1 に答える 1

1

カウントについては、次を参照してくださいstd.algorithm.count

次を含む: . std.algorithm.canFindソートされた配列の場合は、使用できますSortedRange(containsメソッドは二分探索を使用します)。

于 2013-02-18T15:02:05.880 に答える