Как сравнить последнюю цифру для int и удалить элементы, которые имеют ту же последнюю цифру? - PullRequest
2 голосов
/ 19 января 2012

это очень специфический вопрос, но у меня также есть очень конкретные детали того, что я ищу.В настоящее время у меня нет (и я не могу найти) хороший метод для достижения этой цели.Пожалуйста, помогите, если можете.

У меня есть список целых чисел, который всегда будет содержать 4 элемента, а 3 элемента всегда будут заканчиваться одной и той же цифрой.Мне нужно кое-как извлечь 1 элемент, который имеет уникальную конечную цифру.уникальный элемент не всегда будет находиться в одном и том же месте в списке, и все числа в списке будут иметь значение от 0 до 40 (от одной до двух цифр).

пример списка содержимого: 12,22,27,32.мне нужен метод, чтобы вернуть или извлечь 27.

пример 2: 4,13,23,33.мне нужно будет вернуть 4.

решение должно либо удалить из списка 3 повторяющихся числа из последних цифр, либо создать просто стандартную переменную типа int с уникальным значением.

преобразование в строку, сбор этого символа и создание этой нелепой функции, которая проверяет целочисленную длину (количество цифр) и добавляет только конечную цифру в другой список и некоторый код сравнения.это просто смешно.если вы знаете какие-либо идеи, которые я должен попробовать, пожалуйста, дайте мне знать, спасибо заранее.

Ответы [ 5 ]

4 голосов
/ 19 января 2012

Предполагая, что numbers является некоторой итерацией целых чисел:

int unique = numbers.GroupBy(i => i % 10).Single(g => g.Count() == 1).Single();

Это группирует числа по последней цифре, вытаскивает единственную группу с одним участником и возвращает ее единственного члена.

1 голос
/ 19 января 2012

number % 10 даст вам последнюю цифру number.

0 голосов
/ 19 января 2012

Несколько простых примеров, хотя вы, вероятно, ищете причудливый LINQ *:)

* На самом деле LINQ довольно необычен

//compare first to second
if((list[0] - list[1]) % 10 != 0)
{
    //they're not the same, see if first and third are different
    if((list[0] - list[2])% 10 != 0)
    {
        return list[0]; //yes, so first is the odd one
    }
    else
    {
        return list[1]; //no, so second is the odd one
    }
}

//first two are same, so check if third is the odd one
if((list[0] - list[2]) % 10 != 0)
    return list[2]; //yes it is

//only fourth remains
return list[3];
0 голосов
/ 19 января 2012

для такого специфического формата, просто используйте простую сеть if-then-else в оставшейся моде 10 чисел.

if(arem10==brem10) { return( (arem10==crem10) ? d : c); }
if(arem10==crem10) { return(b); }
return(a);
0 голосов
/ 19 января 2012

Я почти уверен, что для решения этой проблемы в C # можно использовать вычисление остатка. В С это%. Например: 15% 10 дает 5.

Теперь давайте предположим, что у нас есть четыре остатка: a, b, c & d.

If a==b:
    if c==b:
        return d
    else:
        return c
else:
    if a==c:
        return b
    else:
        return a

Если у вас много цифр вместо 4:

def func(x):
    if len(x)<3:
       return NULL
    if x[0]!=x[1]:
        if x[0]==x[2]:
            return x[1]
        else:
            return x[0]
    for i in 2:(len(x)-1) :
        if x[0]!=x[i]:
            return x[i]
    return NULL
...