У меня есть список с разными значениями:

Например

{GBP, GBP, GBP, USD} 

Пока у меня есть это:

List<string> currencyTypes = new List<string>();

for (int i = 0; i < currencyTypes.Count; i++)
{
    if currencyTypes[i] != [i]
        console.writeline("currencies are different");
}

Поэтому, если в списке есть все одинаковые записи, оператор if не должен запускаться

E, g {GBP, GBP, GBP, GBP}

Однако, если какое-либо из значений отличается от остальных, оператор if должен заметить разницу и сработать.

Однако это не работает.

Любые идеи?

2
dros 4 Июл 2021 в 22:04

3 ответа

Лучший ответ

Вы можете использовать LINQ, чтобы проверить, все ли записи одинаковы

if (currencyTypes.Distinct().Count() > 1) {
    Console.WriteLine("currencies are different");
}

Немного эффективнее для длинных списков:

if (currencyTypes.Count > 1 && currencyTypes.Distinct().Skip(1).Any()) {
    Console.WriteLine("currencies are different");
}

Это более эффективно, потому что Any выполняет итерацию не более одного элемента, в отличие от Count, который выполняет итерацию всего списка.

0
Olivier Jacot-Descombes 4 Июл 2021 в 19:20

Во-первых, ваш список пуст. Может это для примера. Если нет, инициализируйте его данными. Однако измените строки 3 и 5 на это, чтобы устранить проблему.

for (int i = 1; i < currencyTypes.Count; i++)
{
    if (currencyTypes[i] != currencyTypes[i-1])
   .... 
 } 
1
Qudus 4 Июл 2021 в 19:17

Вы должны сначала сгруппировать свои данные и найти свой результат в зависимости от группы.

Например

    List<string> currencyTypes = new List<string>() {"USD", "GBP", "GBP", "GBP" };

    // group list items
    var typeGroup = currencyTypes.GroupBy(t => t);
    
    if (typeGroup.Count() > 1)
        Console.WriteLine("currencies are different");
    // .    
    // .
    
    // also you can check what item is unique   
    foreach (var t in typeGroup.Where(g => g.Count() == 1 ))
    {
        Console.WriteLine($"{t.Single()} is different");
    }
0
AliReza 4 Июл 2021 в 19:46