Задать вопрос
@MishkaVNorky

Массив. Количество одинаковых значений?

Всем привет.

Допустим есть массив из 6 элементов
1, 5, 5, 4, 7, 5

Как лучше и главное правильнее, узнать кол. одинаковых элементов?

Результат:
1 = 1
5 = 3
4 = 1
7 = 1

ЭТО НЕ БАЗА ДАННЫХ,
  • Вопрос задан
  • 1064 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
freeExec
@freeExec
Участник OpenStreetMap
Почему не база данных, можно как и в базе данных:
using System.Linq;

var list = new List<int>() { 1, 5, 5, 4, 7, 5 };
var gr = list.GroupBy(e => e);
foreach (var line in gr)
{
    Console.WriteLine("{0} => {1}", line.Key, line.Count());
}
Ответ написан
Комментировать
GavriKos
@GavriKos
Пройтись циклом и посчитать. Например, записывая в словарь в качестве ключа значение массива, а в качестве значения - инкрементируемое количество.

Возможно что то в linq найдется еще.

Юнити тут ни при чем.
Ответ написан
shai_hulud
@shai_hulud
Если это небольшие числа, то аллоцировать на стеке N+1 байт, где N это самое большое число, потом пройтись по искомому массиву и каждый раз когда встречается число M, то а аллоцированном массиве байт по сдвигу M инкрементить байт на 1 (и следить за переполнением, либо использовать по 2-4-8 байта на счетчик).
Потом пройтись по этим данным и узнать какое число сколько раз встретилось.
Пример на псевдокоде:
byte* buffer = stackalloc byte[maxNumber+1];
foreach(int number in numbersArray)
{
    buffer[number]++; // может переполниться
}
for(var i = 0; i < maxNumber+1; i++)
{
    var count = buffer[number];
    if (count > 1)
    {
        Console.WriteLine($"Number {i} met {count} times");
    }
}
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Думаю нужно использовать словарь https://docs.microsoft.com/ru-ru/dotnet/api/system...

Проходишь массив(значение массива будет ключом для словаря) и добавляешь значениям словаря 1 если есть ключ или добавляешь ключ с значением 1 если его нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы