Ответ 1
LINQ упрощает:
Dictionary<string, int> counts = array.GroupBy(x => x)
.ToDictionary(g => g.Key,
g => g.Count());
У меня есть массив, который содержит следующие результаты
red
red
red
blue
blue
Green
White
Grey
и я хочу получить дублирующее количество всех значений массива, например:
red Count=3
blue Count=2
Green Count=1
White Count=1
Grey Count=1
LINQ упрощает:
Dictionary<string, int> counts = array.GroupBy(x => x)
.ToDictionary(g => g.Key,
g => g.Count());
Добавьте их в словарь:
Dictionary<string, int> counts = new Dictionary<string, int>();
foreach(string s in list)
{
int prevCount;
if (!counts.TryGet(s, out prevCount))
{
prevCount.Add(s, 1);
}
else
{
counts[s] = prevCount++;
}
}
Затем подсчет содержит строки как ключи и их значение как значения.
небольшая ошибка выше, правильный код:
string[] arr = { "red", "red", "blue", "green", "Black", "blue", "red" };
var results = from str in arr
let c = arr.Count( m => str.Contains(m.Trim()))
select str + " count=" + c;
foreach(string str in results.Distinct())
Console.WriteLine(str);
Хмм. Это очень трудная задача, но вам поможет Капитан-Алгоритм! Он говорит нам, что есть много способов сделать это. Один из них он мне дает, и я даю его вам:
Dictionary <object, int> tmp = new Dictionary <object, int> ();
foreach (Object obj in YourArray)
if (!tmp.ContainsKey(obj))
tmp.Add (obj, 1);
else tmp[obj] ++;
tmp.Values;//Contains counts of elements
сделать еще один массив counts.... и loop на исходном массиве, положив условие, что если он обнаружит красное приращение 1-й ячейки массива count... если он обнаружил, что синий увеличивает вторую ячейку в массиве count....и т.д. Удачи.
Hashtable ht = new Hashtable();
foreach (string s in inputStringArray)
{
if (!ht.Contains(s))
{
ht.Add(s, 1);
}
else
{
ht[s] = (int)ht[s] + 1;
}
}
Я думаю, что это должно сделать трюк
string[] arr = { "red", "red", "blue", "green", "Black", "blue", "red" };
var results = from str in arr
let c = arr.Count( m => str.Contains(m.Trim()))
select str + " count=" + str;
foreach(string str in results.Distinct())
Console.WriteLine(str);
Вывод:
red count=3
blue count=2
green count=1
Black count=1