function count() {
array_elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
array_elements.sort();
var current = null;
var cnt = 0;
for (var i = 0; i < array_elements.length; i++) {
if (array_elements[i] != current) {
if (cnt > 0) {
document.write(current + ' comes --> ' + cnt + ' times
');
}
current = array_elements[i];
cnt = 1;
} else {
cnt++;
}
}
if (cnt > 0) {
document.write(current + ' comes --> ' + cnt + ' times');
}
}
Я не полагаю, что существует путь... Необходимо было бы или быть в состоянии обойти "кучу", и исследовать каждый объект там или обойти стопку каждого активного потока в пространстве процесса приложения, исследуя каждую ссылочную переменную стека на каждом потоке...
другой путь, (я предполагаю Вас, не может сделать), прерывание все операции Создания объекта (использующий контейнерный подход), и сохраните список всех объектов в Вашем приложении...
Если вам нужны экземпляры (образцы) всех типов, реализующих определенный интерфейс, вы можете пройти через все типы, проверить интерфейс и создать экземпляр, если совпадение найдено.
Вот некоторый псевдокод, который замечательно похож на C # и может даже скомпилировать и вернуть то, что вам нужно. Если ничего другого, это укажет вам правильное направление:
public static IEnumerable<T> GetInstancesOfImplementingTypes<T>()
{
AppDomain app = AppDomain.CurrentDomain;
Assembly[] ass = app.GetAssemblies();
Type[] types;
Type targetType = typeof(T);
foreach (Assembly a in ass)
{
types = a.GetTypes();
foreach (Type t in types)
{
if (t.IsInterface) continue;
if (t.IsAbstract) continue;
foreach (Type iface in t.GetInterfaces())
{
if (!iface.Equals(targetType)) continue;
yield return (T) Activator.CreateInstance(t);
break;
}
}
}
}
Теперь, если вы говорите о том, чтобы ходить по куче и возвращать ранее созданные экземпляры всех объектов, которые реализуют определенный тип, удачи вам это потому, что эта информация не хранится в среде выполнения .Net (может быть вычислена отладчиками / профилировщиками, исследуя кучу / стек).
В зависимости от причины, по которой вы думаете, что вам нужно это сделать, возможно, есть лучшие способы сделать это.
Все экземпляры Объекта или все Типы?
Получение всех экземпляров Объекта было бы достаточно близко к невозможному, и включит непубличную информацию о сканировании через память управления.
Получение всех типов, которые реализуют данный интерфейс, является выполнимым---в данном домене. (т.е., можно найти весь тип определенным в рамках блока, которые реализуют конкретный интерфейс)
Если классы, реализующие указанный интерфейс, принадлежат вам, вы можете реализовать список слабых ссылок после создания экземпляра.