Количество экземпляров элемента в списке c# - PullRequest
0 голосов
/ 13 февраля 2020

Я хотел бы знать, как Count экземпляры первого элемента в списке, затем second et c. и выведите эти значения.

var SPFK_List = new List<string>() {
  "one", "one", "one",
  "two", "two",
  "three", "three", "three"
};

Inputs.ones.Value = *(number of one's)*
Inputs.twos.Value = *(number of two's)*

Ответы [ 3 ]

5 голосов
/ 13 февраля 2020

Попробуйте GroupBy ( Linq ), например:

using System.Linq;

...

var SPFK_List = new List<string>() {
  "one", "one", "one",
  "two", "two", 
  "three", "three", "three"
};

// {3, 2, 3}
int[] counts = SPFK_List
  .GroupBy(item => item)
  .Select(group => group.Count())
  .ToArray();

Или (добавьте Where, если хотите считать только некоторые элементы)

// {{"one", 3}, {"two", 2}, {"three", 3}}
Dictionary<string, int> counts = SPFK_List
 //.Where(item => item == "one" || item == "two") 
  .GroupBy(item => item)
  .ToDictionary(group => group.Key, group => group.Count());

Inputs.ones.Value = counts.TryGetValue("one", out int count) ? count : 0;
4 голосов
/ 13 февраля 2020

Возможное решение:

Inputs.ones.Value = SPFK_List.Where(x => x.Equals("one")).Count();
2 голосов
/ 13 февраля 2020

Просто используйте метод Count из System.Linq с перегрузкой, принимающей предикат Func<TSource,bool>

var SPFK_List = new List<string>() {
    "one", "one", "one",
    "two", "two",
    "three", "three", "three"
};

Inputs.ones.Value = SPFK_List.Count(s => s.Equals("one", StringComparison.Ordinal));
Inputs.twos.Value = SPFK_List.Count(s => s.Equals("two", StringComparison.Ordinal));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...