2

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

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

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

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

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

我已经尝试转换为字符串并收集该字符并使用这个荒谬的函数来测试整数长度(位数)并将结束数字添加到另一个列表和一些比较代码。这真的很荒谬。如果您知道我应该尝试的任何想法,请告诉我,在此先感谢。

4

5 回答 5

4

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

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

这会按最后一位数字对数字进行分组,取出唯一具有单个成员的组,并返回其唯一成员。

于 2012-01-19T02:02:41.423 回答
1

number % 10会给你最后一个数字number

于 2012-01-19T01:52:00.870 回答
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
于 2012-01-19T01:52:49.347 回答
0

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

if(arem10==brem10) { return( (arem10==crem10) ? d : c); }
if(arem10==crem10) { return(b); }
return(a);
于 2012-01-19T01:57:49.977 回答
0

这里有一些简单的 if,尽管您可能正在寻找花哨的 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];
于 2012-01-19T02:03:37.293 回答