function getUniqueRandomNos() {
var indexedArrayOfRandomNo = [];
for (var i = 0; i < 100; i++) {
var randNo = Math.random();
indexedArrayOfRandomNo.push([i, randNo]);
}
indexedArrayOfRandomNo.sort(function (arr1, arr2) {
return arr1[1] - arr2[1]
});
var uniqueRandNoArray = [];
for (i = 0; i < 8; i++) {
uniqueRandNoArray.push(indexedArrayOfRandomNo[i][0]);
}
return uniqueRandNoArray;
}
Я думаю, что этот метод отличается от методов, приведенных в большинстве ответов, поэтому я подумал, что могу добавить здесь ответ (хотя вопрос был задан 4 года назад).
Мы генерируем 100 случайных чисел и помечаем каждый из них цифрами от 1 до 100. Затем мы сортируем эти помеченные случайные числа, и теги получают случайным образом перетасовываются. В качестве альтернативы, по мере необходимости в этом вопросе, можно было бы покончить с тем, чтобы найти только 8 из отмеченных случайных чисел. Поиск 8 лучших предметов дешевле, чем сортировка всего массива.
Здесь следует отметить, что алгоритм сортировки влияет на этот алгоритм. Если используемый алгоритм сортировки является стабильным, есть небольшое смещение в пользу меньших чисел. В идеале мы хотели бы, чтобы алгоритм сортировки был неустойчивым и даже не предвзятым к стабильности (или нестабильности) для получения ответа с совершенно равномерным распределением вероятности.
Console.WriteLine(new StackFrame().GetMethod().DeclaringType);
(Инструмент для очистки, IMO) альтернатива (все еще замедляются как, ад и я съежился бы, если бы я видел это в производственной кодовой базе):
Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType);
Между прочим, при выполнении этого для входа некоторым платформам журналирования (таким как log4net) встроили способность. И да, они предупреждают Вас в документах, что это - потенциальный кошмар производительности.
В то время как ответы StackTrace корректны, у них действительно есть издержки. Если Вы просто хотите безопасность против того, чтобы менять имя, рассматриваете typeof(foo).Name
. Так как статические методы не могут быть виртуальными, это должно обычно быть прекрасным.
Так как статические методы не могут быть наследованы, имя класса будет известно Вам, когда Вы запишете метод. Почему не просто hardcode это?