【问题标题】:how to compare last digit for int and remove items that have the same last digit?如何比较 int 的最后一位数字并删除具有相同最后一位数字的项目?
【发布时间】:2012-01-19 01:49:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • intNumber % 10 将返回最后一位。

标签: c# list unique duplicate-removal digit


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,成功了。我最终将最后一位数字添加到数组中,使用您的代码查找唯一值,使用另一个 for 循环将该唯一值与原始数组的最后一位(模数)进行比较,然后进行比较。如果相同,我的程序的其余部分将按预期运行。再次感谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这里有一些简单的 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];
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 对不起,这个语法对我来说有点难以理解。假设我的模数值已经在列表中,因此对于:12、22、27、32,我有一个包含:2、2、7、2 的列表。我怎么只得到2? (再次,我不能简单地要求那个索引,它不会总是在那个位置)
      【解决方案5】:

      我很确定你可以在 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
      

      【讨论】:

      • 哦,是的,我们正在变暖。应该将问题的第二部分放在此处的其他地方,或者您对如何从原始 int 列表中删除该唯一值有任何建议?我可以将最终数字添加到新的 int 列表中,找出唯一数字的索引并从原始列表中返回,或者从原始列表中的各自索引中删除重复的数字值?抱歉,我只是想找出实现这一目标的最佳方法,而不仅仅是一种方法。谢谢。
      猜你喜欢
      • 2017-03-08
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2019-04-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多