如何比较int的最后一位数并删除具有相同最后一位数的项目?

时间:2012-01-19 01:49:18

标签: c# list unique duplicate-removal digit

这是一个非常具体的问题,但我也有非常具体的细节我正在寻找什么。我目前没有(也找不到)实现这一目标的好方法。如果可以,请帮忙。

我有一个整数列表,总是包含4个项目,其中3个项目总是以相同的数字结尾。我需要一些如何提取具有唯一最终数字的1项。唯一项目不会始终位于列表中的相同位置,列表中的所有数字都将是0-40(因此是一到两位数字)的值。

示例列表内容:12,22,27,32。我需要一种方法来返回或提取27。

例2:4,13,23,33。我需要返回4。

解决方案应该从列表中删除3个重复的最后一位数字,或者可能只创建一个具有唯一值的标准int变量。

我尝试过转换为字符串并收集该字符并使用这个荒谬的函数来测试整数长度(位数),并将结束数字添加到另一个列表和一些比较代码中。这太荒谬了。如果您知道我应该尝试的任何想法,请提前告知我们。

5 个答案:

答案 0 :(得分:4)

假设numbers是一些可迭代的整数:

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

按照最后一位数字对数字进行分组,将唯一一个成员拉出,并返回其唯一成员。

答案 1 :(得分:1)

number % 10将为您提供number的最后一位数字。

答案 2 :(得分:0)

我很确定您可以在C#中使用余数计算来解决此问题。在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

答案 3 :(得分:0)

对于这种特定格式,只需使用简单的if-then-else网络即可 余数mod 10的数字。

if(arem10==brem10) { return( (arem10==crem10) ? d : c); }
if(arem10==crem10) { return(b); }
return(a);

答案 4 :(得分:0)

这里有一些简单的ifs,虽然你可能正在寻找花哨的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];